【问题标题】:C# - positioning of statements in loopC# - 在循环中定位语句
【发布时间】:2015-03-07 23:29:59
【问题描述】:

有一个作业,“编写一个程序,生成 0 到 100000 之间的 1000 个随机数。显示生成的奇数值的数量以及最小值和最大值。”

编写代码,如果其中一个随机数出现奇数/最大/

所有这些都写好了,但我似乎找不到让我的 max/min/odd 语句起作用的正确位置。

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

namespace RandomNumberFacts
{
    class RandomNumberFacts
    {
        static void Main()
        {
        bool moreData = true;
        Random numb = new Random();
        int s = numb.Next(100000);
        int max = -1;
        int min = 100001;
        int odd = 0;
        int counter = 0;
        while (moreData)
        {

            counter++;
            if (counter >= 1000)
            {
                moreData = false;
            }
            else
            {
                s = numb.Next(100000);
            }
            if (s < min)
                s = min;
            if (s > max)
                s = max;
            if (s % 2 == 1)
                odd++;
        }
        Console.WriteLine("Amount of odd numbers in set is:"); 
        Console.WriteLine(odd);
        Console.WriteLine("Largest number in set is:");
        Console.WriteLine(max);
        Console.WriteLine("Smallest number in set is:");
        Console.WriteLine(min);
        Console.ReadKey();


    }
}

}

【问题讨论】:

  • 您在测试了最小值/最大值后反转了赋值。你需要min = smax = s
  • 不是 s = max,而是 max =s
  • 用 for 循环代替 while 循环会更容易阅读。
  • 另外,s 没有在循环的最后一次迭代中设置
  • @Measuring: “介于 0 和 100000 之间”因此不清楚 100000 是否是有效结果。就此而言,尚不清楚 0 是否为有效结果。

标签: c#


【解决方案1】:

你的逻辑是错误的:当你找到一个较小的数字时,你应该改变当前的min,而不是新的数字。即

if (s < min) {
    min = s; // Not s = min;
}

max 也是如此。您的odd 柜台很好。

【讨论】:

  • 好吧,修正反演后就可以了,否则它总是为零,因为 s 是最大值
  • @Steve:因为代码错误地认为-1 是均匀的......尽管在修复分配之后这也无关紧要。
  • 谢谢。我已经完成了反转并移动了 WriteLine 语句以允许它一次运行(我意识到 ReadKey 要求我按 Enter 1000 次)。
【解决方案2】:

这是编写 while 循环的更简洁的方法,

    Random numb = new Random();
    int s = numb.Next(100000);
    int max = -1;
    int min = 100001;
    int odd = 0;
    int counter = 0;
    while (true)
    {
        counter++;
        s = numb.Next(100000);
        min = (s < min) ? s : min;
        max = (s > max) ? s : max;
        if((s % 2) = 1) odd++;
        if (counter >= 1000)break;
    }

【讨论】:

  • 你的循环只做 999,而不是 1000
  • 简单,把 break 移到 while 循环的末尾,但是感谢 Les,很好的捕捉
猜你喜欢
  • 1970-01-01
  • 2014-12-28
  • 2019-03-25
  • 1970-01-01
  • 1970-01-01
  • 2016-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多