簡體   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