亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 foreach 循環中未修改值

在 foreach 循環中未修改值

C#
忽然笑 2022-06-18 17:10:44
我來自 C++、python 背景,最近開始學習 C#。但是我偶然發現了一個特殊的問題,在花了相當長的時間后我無法弄清楚。如果我正在嘗試一些算法編碼問題來學習語言,請原諒它看起來太基本了。我有這個代碼public class Solution {    public int SmallestRangeII(int[] A, int K) {        float mean = A.Sum() / A.Length;        Console.WriteLine($"the mean is {mean}");        int mini = int.MinValue;        int maxi = int.MaxValue;        foreach(int x in A) {            int temp = x + ((x - mean) < 0 ? K : -K);            Console.WriteLine($"{temp}");            mini = Math.Min(mini, temp);            maxi = Math.Max(maxi, temp);            Console.WriteLine($"{mini} and {maxi}");        }        Console.WriteLine($"the maximum and minimum values are {maxi} and {mini}");        return maxi - mini;    }}當我傳遞參數時A = [1],K = 0在執行此代碼時,我得到輸出:the mean is 11-2147483648 and 2147483647the maximum and minimum values are 2147483647 and -2147483648在循環的第一次迭代中,為什么 和 沒有maxi分別mini修改為 1 和 1?
查看完整描述

3 回答

?
收到一只叮咚

TA貢獻1821條經驗 獲得超5個贊

我不知道您要做什么,所以我無法提供解決方案,但是如果您查看您的代碼,您會看到,在您提供的情況下,min = -2^31 并且您的 temp 變量等于 1。這兩個數字的 Math.Min 顯然選擇了較小的數字 -> -2^31。與最大值相同。


如果您嘗試獲得數組中最大和最小的 nimber,請嘗試將 min 和 max 的第一個分配更改為


int min = int.MaxValue();

int max = int.MinValue();

我猜這將導致您想要的解決方案。


查看完整回答
反對 回復 2022-06-18
?
慕桂英546537

TA貢獻1848條經驗 獲得超10個贊

首先,

  • Foreach 循環將僅迭代一次,因為您的數組包含單個元素

  • temp 的值計算為 1。

    int temp = x + ((x - mean) < 0 ? K : -K);

因為 is 的值K0根據您的輸入將 x ie 1 添加到它。

如果您想獲得基于 0 的最小值和最大值,那么它將提供與您在輸入中收到的結果相同的結果

了解變量中存儲的值的最佳方法是使用Console.WriteLine(). 這將為您在控制臺上打印結果。就像是

 foreach(int x in A) {

        int temp = x + ((x - mean) < 0 ? K : -K);

        Console.WriteLine($"x: "+{x}+"\t mean: "+{mean}+"\t K: "+{K});

        Console.WriteLine($"mini: "+{mini}+"\t maxi: "+{maxi});

        Console.WriteLine($"{temp}");

        mini = Math.Min(mini, temp);

        maxi = Math.Max(maxi, temp);

        Console.WriteLine($"{mini} and {maxi}");

    }

或調試您的代碼


查看完整回答
反對 回復 2022-06-18
?
人到中年有點甜

TA貢獻1895條經驗 獲得超7個贊

在foreach方法之前將int.MinValue設置為mini并將int.MaxValue設置為maxi,然后調用 Min 和 Max 方法來獲取最小值和最大值。您應該考慮到在第一次迭代中,mini 的值為 -2147483648,因此您可以像這樣調用 Min 方法:


mini = Math.Min(-2147483648, 1);

此方法適合您。如果要將最小值設置為1,那么您有多種選擇。其中之一是將 mini 和 maxi 類型更改為可為空的整數(int?)。


int? mini;

int? maxi;

然后在foreach中檢查它的值,如下所示:


foreach (int x in A)

{

    int temp = x + ((x - mean) < 0 ? K : -K);

    Console.WriteLine($"{temp}");

    if(mini.HasValue)

        mini = Math.Min(mini.Value, temp);

    else

        mini = temp;


    if(maxi.HasValue)

        maxi = Math.Max(maxi.Value, temp);

    else

        maxi = temp;

    Console.WriteLine($"{mini} and {maxi}");

}


查看完整回答
反對 回復 2022-06-18
  • 3 回答
  • 0 關注
  • 169 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號