[英]C# Random number doesn't Generate 0
我正在C#控制台應用程序上的足球聯賽夾具項目中工作。 我正在嘗試從數組中選擇隨機的球隊,其中包含在家中和外場比賽的球隊。 當我嘗試生成9個隨機數時,僅生成8個數字而沒有生成0個數字,因此代碼無法中斷for循環。 我想問題是if語句不允許生成相同的數字,並且int數組元素的默認值為0。
這是代碼和輸出:
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的數組,因為0
是int
的默認值。
所以,你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.