簡體   English   中英

C#隨機數不會生成0

[英]C# Random number doesn't Generate 0

我正在C#控制台應用程序上的足球聯賽夾具項目中工作。 我正在嘗試從數組中選擇隨機的球隊,其中包含在家中和外場比賽的球隊。 當我嘗試生成9個隨機數時,僅生成8個數字而沒有生成0個數字,因此代碼無法中斷for循環。 我想問題是if語句不允許生成相同的數字,並且int數組元素的默認值為0。

這是代碼和輸出:

C#代碼輸出

    int randomHome; //Random number genetator for choosing a random iteration value from home array which containss the teams which plays at their home
    int randomAway; //Random number genetator for choosing a random iteration value from awayarray which containss the teams which plays at away

      Random randomNum = new Random();

      int[] randomHomeNumArray = new int[home.Length]; //array will hold the randomHome values and home array is the array which is holding the team's iteration values which plays at their home
      int[] randomAwayNumArray = new int[away.Length]; //array will hold the randomAway values and away array is the array which is holding the team's iteration values which plays at away
         for (int homeArrayCounter = 0; homeArrayCounter < randomHomeNumArray.Length; homeArrayCounter++)
        {
            randomHome = randomNum.Next(home.Length)

            if (!randomHomeNumArray.Contains(randomHome) )
            {
                randomHomeNumArray[homeArrayCounter] = randomHome;   //It will hold the randomHome values
                Console.WriteLine(homeArrayCounter + ". iterasyon in Home " + randomHomeNumArray[homeArrayCounter]);
            }
            else
            {
                homeArrayCounter--;
            }
        }
        Console.WriteLine("\n\n");


        for (int awayArrayCounter = 0; awayArrayCounter < randomAwayNumArray.Length; awayArrayCounter++)
        {
            randomAway = randomNum.Next(randomAwayNumArray.Length);    

            if (!randomAwayNumArray.Contains(randomAway))
            {
                randomAwayNumArray[awayArrayCounter] = randomAway;     //It holds the random valures from away array which contains the teams which plays at away
                Console.WriteLine(awayArrayCounter + ". iterasyon in Away " + randomAwayNumArray[awayArrayCounter]);
            }

            else
            {
                awayArrayCounter--;
            }
        }

初始化數組時,每個索引的默認值為0。 使用隨機數時,它總是會跳過0,因為它已經存在。

您可以這樣嘗試:-

for(int i= 0; i<randomHomeNumArray.Length; i++){
            randomHomeNumArray[i] = -1;
        }

        for (int homeArrayCounter = 0; homeArrayCounter < randomHomeNumArray.Length; homeArrayCounter++)
        {
            do{
                randomHome = randomNum.Next(home.Length);
            } while(!randomHomeNumArray.Contains(randomHome));
            randomHomeNumArray[homeArrayCounter] = randomHome;   //It will hold the randomHome values
            Console.WriteLine(homeArrayCounter + ". iterasyon in Home " + randomHomeNumArray[homeArrayCounter]);
        }

看來您正在嘗試隨機化陣列。

嘗試以下方法:

Random randomNum = new Random();

int[] randomHomeNumArray = Enumerable.Range(0, home.Length).OrderBy(_ => randomNum.Next()).ToArray();
int[] randomAwayNumArray = Enumerable.Range(0, away.Length).OrderBy(_ => randomNum.Next()).ToArray();

而已。 完成。

您的問題是數組的默認初始化:

int[] randomHomeNumArray = new int[home.Length]; 

這將創建一個填充有0 s的數組,因為0int的默認值。

所以,你if條件

if (!randomHomeNumArray.Contains(randomHome))

對於0始終為false ,因為數組中已經包含0


您可以這樣初始化數組:

int[] randomHomeNumArray = Enumerable.Repeat(-1, home.Length).ToArray(); 

因此,您用-1而不是0填充它,並且if條件起作用。

因為int不是可為null的數據類型,所以默認情況下,將int[]初始化為零。 因此,即使您認為這是一個空數組,它實際上也是一個所有元素都設置為零的數組。

要解決此問題,您可以考慮使用int?[] (可空int數組)代替。 或者,可以使用負整數或大於最大包含上限的某個整數來初始化數組。 更好的是,以更好的方式使用@Enigmativity提供的解決方案來實現所需的目標 ,並在可以幫助的情況下將其答案標記為接受。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM