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