【问题标题】:(C#) How can I take numbers from my random number generator and output the highest and lowest number in a message box?(C#) 如何从随机数生成器中获取数字并在消息框中输出最高和最低数字?
【发布时间】:2013-07-09 00:07:11
【问题描述】:

我有一个随机数生成器,对于分配,我们必须获取随机数并在最大和最小数字的消息框中进行输出。我想我需要以某种方式使用 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);
        }         
    }
}

【问题讨论】:

标签: c# random numbers


【解决方案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"),但如果您构建了一个控制台应用程序,则必须包含一堆程序集才能使其正常工作。

【讨论】:

  • 我们目前只使用控制台应用程序。我不认为消息框不太复杂。
  • @secretlygayfrog 不是,但它对于控制台应用程序没有意义。在这种情况下,您只想使用Console.WriteLine 进行输出。只是您使用的语言听起来像是您想使用MessageBox
【解决方案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);
}

【讨论】:

    【解决方案3】:

    要在控制台应用程序中显示消息框,您需要设置对 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() );
    

    【讨论】:

      【解决方案4】:

      另一种方法是使用 Linq 的 Aggregate 方法:

      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));
      

      【讨论】:

        【解决方案5】:

        您只需要收集所有随机数以从中选择最小值和最大值。您也正在使用控制台应用程序和可能在 Windows 窗体中使用的 MessageBox,但如果您想在控制台应用程序中使用它,您需要导入 using System.Windows.Forms; 库才能通过 Select 使用它:

        Project->Add Reference  
        

        从左侧选择

        FrameWork
        

        然后选择

        System.Windows.Forms
        

        然后在代码的开头写:

        using System.Windows.Forms;
        

        最后点击

        OK
        

        然后你的代码在 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");
        
                }
            }
        }
        

        【讨论】:

          猜你喜欢
          • 2015-04-08
          • 1970-01-01
          • 2023-03-24
          • 1970-01-01
          • 1970-01-01
          • 2019-04-23
          • 1970-01-01
          • 2022-07-30
          • 1970-01-01
          相关资源
          最近更新 更多