0

私は乱数ジェネレーターを持っており、割り当てのために乱数を取り、最大値と最小値のメッセージボックスに出力する必要があります。どういうわけかif/elseを使用する必要があると思いますが、ちょっと混乱しています。現在の私のコードは次のようになります。

class Program
{
    static void Main(string[] args)
    {
        Random random = new Random();
        int randomNumber;
        for (int i = 0; i < 11; i++)
        {
            randomNumber = random.Next(1000);
            Console.WriteLine(randomNumber);
        }         
    }
}
4

5 に答える 5

1

一連の数値の最小値と最大値の両方に関心があるだけで、それぞれを保存するのではなく、2 つの変数の現在の最大値と最小値を保持し、ループの進行に合わせてそれらを更新することができます。最後の反復の後、ロット全体の最大値と最小値を取得します。

static void Main(string[] args)
{
    Random random = new Random();
    int maxNumber;
    int minNumber;
    maxNumber = minNumber = random.Next(1000);   // Assign both variables at once
    for (int i = 0; i < 11; i++)
    {
        int randomNumber = random.Next(1000);
        Console.WriteLine(randomNumber);
        if (randomNumber > maxNumber) maxNumber = randomNumber;
        if (randomNumber < minNumber) minNumber = randomNumber;
    }
    Console.WriteLine("Maximum: {0}", maxNumber);
    Console.WriteLine("Minimum: {0}", minNumber);
    Console.ReadKey(true);
}
于 2013-07-09T00:30:34.603 に答える
1

すべての数値をコレクションに入れると、LINQ to Objects 拡張メソッドMinMax

Random random = new Random();
List<int> randos = new List<int>();
for (int i = 0; i < 11; i++)
{
    randos.Add(random.Next(1000));
}

int min = randos.Min();
int max = randos.Max();

Console.WriteLine("The minimum value is " + min);
Console.WriteLine("The maximum value is " + max);

完全なリストを生成するまで最小値または最大値を取得できないため、そのコードは for ループの外側にある必要があり、すべてのランダム値をコレクションに配置して永続化する必要があります。あなたの問題は、完全に形成されたコレクションを最初に作成する必要があるときに、すべてをストリーミング方式で実行しようとすることにあると思います。

また、メッセージ ボックスをポップアップ表示する場合は、Visual Studio でプロジェクトを作成するときに、コンソール アプリケーションではなく Windows フォーム アプリを作成する必要があります。winforms を使用している場合はそのまま実行できますMessageBox.Show("My message here")が、コンソール アプリケーションを作成した場合は、それを機能させるために一連のアセンブリを含める必要があります。

于 2013-07-09T00:11:00.860 に答える
0

コンソール アプリケーションでメッセージ ボックスを表示するには、System.Windows.Forms への参照を設定し、適切な using ステートメントの後に次のようにする必要があります。

            Random random = new Random();
            List<int> randomNumbers = new List<int>();
            for (int i = 0; i < 11; i++)
            {
                randomNumbers.Add(random.Next(100000));//or set to your desired value
            }

            //Console.WriteLine("Biggest number is {0} -smallest is {1}", randomNumbers.Max(), randomNumbers.Min());
            MessageBox.Show("Biggest number is " + randomNumbers.Max().ToString() + "- smallest is " + randomNumbers.Min().ToString() );
于 2013-07-09T00:29:43.033 に答える
0

You just need to gather all random numbers to select the minimum and maximum from them. also you are using Console Application and the MessageBox probably used in Windows Forms but if you want to use it in Console Application you need to import the using System.Windows.Forms; library to use it just by Select:

Project->Add Reference  

From the left side Select

FrameWork

and then choose

System.Windows.Forms

and then at the beginning of your code write:

using System.Windows.Forms;

Finally click

OK

and then your code in the Main:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Xml.Linq;

namespace MyProgram
{
    class Program
    {
        static void Main(string[] args)
        {
            Random random = new Random();
            List<int> randomNumbers= new List<int>();
            for (int i = 0; i < 11; i++)
            {
                randomNumbers.Add(random.Next(1000));
            }

            MessageBox.Show(string.Format("The minimum is: {0}\nThe maximum is: {1}", randomNumbers.Min(), randomNumbers.Max()), "Result");

        }
    }
}
于 2013-07-09T00:32:27.593 に答える
0

Another method would be to use Linq's Aggregate method:

var random = new Random();
var limits = 
    Enumerable.Range(0, 11)
              .Select(x => random.Next(1000))
              .Aggregate(new { min = int.MaxValue, max = int.MinValue }, 
              (a, x) => new 
              { 
                  min = Math.Min(a.min, x), 
                  max = Math.Max(a.max, x) 
              });
MessageBox.Show(string.Format("Min: {0}, Max: {1}", limits.min, limits.max));
于 2013-07-09T00:33:04.193 に答える