繁体   English   中英

传递数组有麻烦

[英]having trouble with passing array

我在传递数组值时遇到问题。 我已经为此工作了好几个小时,似乎找不到答案。 想知道是否有人可以指出我正确的方向。 到目前为止,这就是我所拥有的。 我看过无数的示例,视频和阅读材料,似乎无法提出解决方案。 我非常感谢您的帮助。

static void Main(string[] args)
    {
        int Seed = 0;            
        int[] random = new int[10];
        int[] input = new int[10];

        for (int x = 0; x < random.Length; x++)
        {
            Seed = (int)DateTime.Now.TimeOfDay.Ticks;
            random[x] = getRnd(Seed);                
        }                     
        for (int x = 0; x < input.Length; x++)
        {
            Console.Write("Enter an integer number between 1 and 100: ");
            input[x] = Convert.ToInt32(Console.ReadLine());              
        }

        int inputnumber=input[0];
        for (int x = 0; x < input.Length; x++)

            if (inputnumber <= random[x])
            {
                Console.WriteLine("The entered number " + inputnumber + " is less than " + random[x]);
            }
            else if (inputnumber >= random[x])
            {
                Console.WriteLine("The entered number " + inputnumber + " is greater than " + random[x]);
            }
            else if (inputnumber == random[x])
            {
                Console.WriteLine("The entered number " + inputnumber + "  is equal to " + random[x]);
            }

    }                
        static int getRnd(int Seed)
        {
          Random myrandomnum = new Random(Seed);
          int randomvalue = myrandomnum.Next(1, 100);
          return randomvalue;
        }
}

}

我需要像这样打印。

Enter an integer number between 1 and 100: 1
Enter an integer number between 1 and 100: 8
Enter an integer number between 1 and 100: 44
Enter an integer number between 1 and 100: 22
Enter an integer number between 1 and 100: 16
Enter an integer number between 1 and 100: 88
Enter an integer number between 1 and 100: 41
Enter an integer number between 1 and 100: 77
Enter an integer number between 1 and 100: 10
Enter an integer number between 1 and 100: 52
The entered number 1 is less than 64
The entered number 8 is less than 44
The entered number 44 is less than 80
The entered number 22 is less than 91
The entered number 16 is less than 95
The entered number 88 is greater than 39
The entered number 41 is less than 79
The entered number 77 is greater than 27
The entered number 10 is less than 35
The entered number 52 is less than 65
Press any key to continue . . .

但是我得到这个:

    Enter an integer number between 1 and 100: 1
    Enter an integer number between 1 and 100: 8
    Enter an integer number between 1 and 100: 44
    Enter an integer number between 1 and 100: 22
    Enter an integer number between 1 and 100: 16
    Enter an integer number between 1 and 100: 88
    Enter an integer number between 1 and 100: 41
    Enter an integer number between 1 and 100: 77
    Enter an integer number between 1 and 100: 10
    Enter an integer number between 1 and 100: 52
    The entered number 1 is less than 64
    The entered number 1 is less than 64
    The entered number 1 is less than 64    
    The entered number 1 is less than 64
    The entered number 1 is less than 64
    The entered number 1 is less than 64
    The entered number 1 is less than 64
    The entered number 1 is less than 64
    The entered number 1 is less than 64
    The entered number 1 is less than 64
    Press any key to continue . . .

有两个问题-一个解释了为什么只使用第一个输入数字,另一个解释了为什么只将它与一个随机数进行比较。

对于随机数部分,这是问题所在:

Seed = (int)DateTime.Now.TimeOfDay.Ticks;
random[x] = getRnd(Seed);   
...
static int getRnd(int Seed)
{
    Random myrandomnum = new Random(Seed);

除非DateTime.Now.TimeOfDay.Ticks在两次迭代之间发生变化-这是非常不可能的,因为系统时钟分辨率通常为毫秒级,并且两次迭代之间您不会做很多工作-您将创建多个Random ,所有种子相同。 这意味着您将从每个实例中获得相同的随机数序列-但实际上您无论如何都只从每个实例中请求一个数。

该解决方案是创建一个 Random的实例,然后使用该为你生成每一个随机数。

Random rng = new Random();
for (int x = 0; x < random.Length; x++)
{
    random[x] = GenerateRandomValue(rng);
}  
...
static int GenerateRandomValue(Random random);
{
  int randomvalue = random.Next(1, 100);
  return randomvalue;
}

当然,此时您可以考虑完全删除该方法,并使用:

Random rng = new Random();
for (int x = 0; x < random.Length; x++)
{
    random[x] = random.Next(1, 100);
}  

您可能还需要考虑使用random.Next(1, 100)如果你想1和100之间值-的第二个参数Random.Next是一个独特的上限。

注意,这种创建单个Random实例的方法在多线程方案中效果不佳,因为Random不是线程安全的。 幸运的是,这不是问题,但是如果您以后需要的话,请参阅我有关Random文章,以获取更多信息。

对于“仅使用单个输入值”问题,LaD1Da的答案会更详细,但问题是inputNumber始终为input[0] ...您从未使用过input[1]input[2]等。

我没有足够的“信誉”来简单地添加评论:

问题是您没有在上一个循环中更改输入号。 您始终使用input[0] 只需将最后一个循环更改为以下内容:

for (int x = 0; x < input.Length; x++)
    int inputnumber = input[x]; // This is new
    if (inputnumber <= random[x])
    {
        Console.WriteLine("The entered number " + inputnumber + " is less than " + random[x]);
    }
    else if (inputnumber >= random[x])
    {
        Console.WriteLine("The entered number " + inputnumber + " is greater than " + random[x]);
    }
    else if (inputnumber == random[x])
    {
        Console.WriteLine("The entered number " + inputnumber + "  is equal to " + random[x]);
    }
}

编辑:此外,您的随机数生成存在问题。 有关此信息,请参阅Jon Skeet的答案。

有两个问题。

第一个问题是在getRnd() 在循环的每次迭代中,您都传递了一个新的种子,但是循环执行得如此之快,以至于Ticks的数量在每次迭代中都可能是相同的。 您可以通过以下方式解决此问题:将种子移出循环,然后将Random生成器作为参数传递给getRnd()函数:

Seed = (int)DateTime.Now.TimeOfDay.Ticks;
Random rand = new Random(Seed);
for (int x = 0; x < random.Length; x++)
{
    random[x] = getRnd(rand);                
}  

第二个问题在您的循环中。 在这行上:

int inputnumber=input[0];

您可以将input[0]的值分配给inputnumber 但是,您永远不会在循环的将来迭代中更改它。 您可以通过在每次循环迭代中遍历input[]来解决此问题,即:

for (int x = 0; x < input.Length; x++)
{    
    if (input[x] <= random[x])
    {
        Console.WriteLine("The entered number " + input[x] + " is less than " + random[x]);
    }
    else if (input[x] >= random[x])
    {
        Console.WriteLine("The entered number " + input[x] + " is greater than " + random[x]);
    }
    else if (input[x] == random[x])
    {
        Console.WriteLine("The entered number " + input[x] + "  is equal to " + random[x]);
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM