簡體   English   中英

在隨機生成的數組中,最小數始終為 0

[英]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永遠不會改變。

將其初始化為number2int.MaxValue ,您將獲得實際的最小值。

在 min 賦值行上放一個斷點: min 總是 0 因為你沒有傳遞它......

因為array[i] < min總是假的,因為min0開始並且array[i]總是更高。

要在不重寫算法的情況下解決問題,您可以將 min 設置為:

min = int.MaxValue;

由於max0開始,它適用於它,但你應該寫:

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.

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