[英]In randomly generated array minimum number is always 0
我想知道為什么最小數字總是“0”。
我用隨機數生成數組,然后我做了一些操作。 除了最小數量外,一切正常。
這是我的代碼:
class Program
{
static void Main(string[] args)
{
var array = new int[10];
var number1 = 1;
var number2 = 100;
var min = array[0];
var max = array[0];
var sum = 0;
var average = 0;
Random randomNum = new Random();
for (int i = 0; i < array.Length; i++)
{
array[i] = randomNum.Next(number1, number2);
Console.WriteLine(array[i].ToString());
if(array[i] > max)
{
max = array[i];
}
else if (array[i] < min)
{
min = array[i];
}
sum += array[i];
average = sum / array.Length;
}
Console.WriteLine($"\nmin = {min}, max = {max}, sum = {sum} and average = {average}");
}
}
因為您在填充數組之前使用array[0]
初始化了min
變量。
初始化數組會將其所有項目初始化為其默認值(有關更多詳細信息,請閱讀Why doesn't a struct in an array have to be initialized? ),並且int
的默認值為0
,並且您的數組僅包含數字大於0
,你的min
永遠不會改變。
將其初始化為number2
或int.MaxValue
,您將獲得實際的最小值。
在 min 賦值行上放一個斷點: min 總是 0 因為你沒有傳遞它......
因為array[i] < min
總是假的,因為min
從0
開始並且array[i]
總是更高。
要在不重寫算法的情況下解決問題,您可以將 min 設置為:
min = int.MaxValue;
由於max
從0
開始,它適用於它,但你應該寫:
max = 0;
即使array[0]
默認初始化為0
。
由於以下原因,您的min
將始終為零:
else if (array[i] < min)
{
min = array[i];
}
您正在將min
初始化為零。 當您從Random.next
中獲取一個數字時,它將給出 [1,100) 因此 min 將始終小於randomNumber
。 因此,您的最小值永遠不會改變。
相反,您可以這樣做:
min = int.MaxValue;
在 for 循環之前。
我做了一些更完整的返工,然后只是那些提示。
var array = new int[10];
//telling names are very importan
var lowerBound = 1;
var upperBound = 100;
//This is a reliable initialisation
var min = upperBound;
var max = lowerBound;
var sum = 0;
Random randomNum = new Random();
for (int i = 0; i < array.Length; i++)
{
//adding a temporary variable makes it cleaner and requires less accessor use
int temp = randomNum.Next(number1, number2);
Console.WriteLine(temp.ToString());
//No else-if. The first number has a 98% chance to check both of those.
if(temp > max)
{
max = temp;
}
if (temp < min)
{
min = temp;
}
sum += temp;
arraiy[i] = temp;
}
//No point calculating that before the output.
int average = sum / array.Length;
Console.WriteLine($"\nmin = {min}, max = {max}, sum = {sum} and average = {average}");
請注意,我做了大部分工作是為了便於閱讀。 性能方面應該沒有區別。 JiT 編譯器非常擅長削減未充分使用的臨時變量或添加臨時變量以避免過多的索引器訪問。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.