如何捕获 1000 个随机整数的最小值和最大值?

Posted

技术标签:

【中文标题】如何捕获 1000 个随机整数的最小值和最大值?【英文标题】:How do I capture the minimum and maximum for 1000 random integers? 【发布时间】:2019-08-17 05:05:34 【问题描述】:

问题要求代码进行 1000 次迭代。它必须允许从 0 到 100000 的整数,并显示在迭代期间生成了多少奇数,然后显示生成的最大数字和最小数字。我的代码的第一部分有效并显示了生成了多少奇数,但是我无法弄清楚如何捕获/编辑代码运行时生成的最小和最大数字。

我尝试了许多不同的方法,包括 while 循环和我的 if、else if 条件。我已将它们放在我的程序中,但是我被卡住了。我知道问题在于 randNum 进入变量并在每次迭代中停留在那里而不回到零。(当我运行我的代码时,它对于 smallNum 和 LargeNum 显示为零。)

这是我目前的工作

using System;
using System.Windows.Forms;

namespace BissonnetteMessageBox


  class Program
    
      static void Main(string[] args)

      

        int oddNumCount = 0;
        int smallNum = 0;
        int largeNum = 0;
            Random randNum = new Random();


            for (int i = 0; i < 1000; i++)
            

                int num = randNum.Next(100000);
                int remain = num % 2;

                if (remain != 0)
                
                    oddNumCount++;


                
                if (num < smallNum)
                
                    num = smallNum;
                
                else if (num > largeNum)
                
                    num = largeNum;
                

            

            MessageBox.Show("the Number of odd numbers generated: " + oddNumCount +
                "\nSmallest number was: " + smallNum +
                "\nLargerst number was: "+ largeNum , "random number generation results");
        
    

这是我运行程序时的结果:

【问题讨论】:

你应该分配smallNumlargeNum而不是分配num 从 0 作为最小的数字开始可能也没有帮助。请在发布之前进行一些调试。 您已颠倒了smallNumlargeNum 的分配。 整数类型有一个最大和最小可能值aa属性(你可以查一下)。如果您将初始最小值设置为整数类型的最大值(并将初始最大值设置为 int 类型最小值),然后观察调试器中发生的情况,您应该会看到这两个值的行为符合您的预期。顺便说一下,一种编程方法可以将随机数的生成与分析(最大值、最小值等)分开。这样您就可以针对一组已知数字测试分析部分,看看它是否有效 不是答案,也不是针对 OP,但是……伙计,这样的问题让我爱上了 LINQ。 Enumerable.Range(1,1000).Select(x => randNum.Next(1000)) - 后跟捕获 .Min、.Max 和 .Where(x => x % 2) 的变量。将 20 行代码替换为 3 行。 【参考方案1】:

行“num = smallNum;”和“num = largeNum;”错了。它们应该是“smallNum = num;”和“largeNum = num;”。这是因为“=”右侧的变量(或常量、表达式)覆盖了左侧的变量。它不像在数学中,它可以被扭转。 这是正确的代码:

using System;
using System.Windows.Forms;

namespace BissonnetteMessageBox


internal class Program

    private static void Main(string[] args)

    

        int oddNumCount = 0;
        int smallNum = 0;
        int largeNum = 0;
        Random randNum = new Random();


        for (int i = 0; i < 1000; i++)
        

            int num = randNum.Next(100000);
            int remain = num % 2;

            if (remain != 0)
            
                oddNumCount++;
            
            if (num < smallNum)
            
                smallNum = num;
            
            else if (num > largeNum)
            
                largeNum = num;
            

        

        MessageBox.Show("the Number of odd numbers generated: " + oddNumCount +
            "\nSmallest number was: " + smallNum +
            "\nLargerst number was: " + largeNum, "random number generation results");
    


【讨论】:

smallNum还是有问题,这种情况下永远是0。 我可以通过设置 smallNum=100000 来绕过它,这将允许我的程序在每次程序发现较小的数字时进行更新【参考方案2】:

许多人指出了代码本身的两个主要问题。

我想谈谈在您学习编程时如何处理此类问题。

看起来您在 Visual Studio 中,使用 C# 进行编程。好消息是,Visual Studio 让您在逐步执行程序时非常容易看到正在发生的事情。您可以在代码中设置断点,这样当程序到达该行时,它就会停止 - 突出显示该行并让您看到正在发生的事情。从那里,您可以向前推进代码行,观察值的变化。

这里有一些有用的开始:

Using breakpoints in Visual Studio Tips and tricks with the VS debugger Some more tips and tricks with debugging

这将是难以置信向前发展的价值。因为,老实说,如果你发现自己在遇到任何问题时都不得不在网上发布问题,那么你就不会非常喜欢编程。能够找出障碍将使您的生活更加愉快:-)

【讨论】:

以上是关于如何捕获 1000 个随机整数的最小值和最大值?的主要内容,如果未能解决你的问题,请参考以下文章

java程序,随机产生包含20个元素的数组,求出数组中的最大值,最小值和平均值

C语言编程:从键盘输入10个数,求最大值,最小值和平均值

C语言编程:从键盘输入10个数,求最大值,最小值和平均值

如何在 NSString/String 数组中获取最小值和最大值?

如何只进行“n”比较,从文本文件中查找最小值和最大值?

制作一个随机整数数组