第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

在 foreach 循環(huán)中未修改值

在 foreach 循環(huán)中未修改值

C#
忽然笑 2022-06-18 17:10:44
我來自 C++、python 背景,最近開始學(xué)習(xí) C#。但是我偶然發(fā)現(xiàn)了一個特殊的問題,在花了相當(dāng)長的時間后我無法弄清楚。如果我正在嘗試一些算法編碼問題來學(xué)習(xí)語言,請原諒它看起來太基本了。我有這個代碼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;    }}當(dāng)我傳遞參數(shù)時A = [1],K = 0在執(zhí)行此代碼時,我得到輸出:the mean is 11-2147483648 and 2147483647the maximum and minimum values are 2147483647 and -2147483648在循環(huán)的第一次迭代中,為什么 和 沒有maxi分別mini修改為 1 和 1?
查看完整描述

3 回答

?
收到一只叮咚

TA貢獻(xiàn)1821條經(jīng)驗 獲得超5個贊

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


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


int min = int.MaxValue();

int max = int.MinValue();

我猜這將導(dǎo)致您想要的解決方案。


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

TA貢獻(xiàn)1848條經(jīng)驗 獲得超10個贊

首先,

  • Foreach 循環(huán)將僅迭代一次,因為您的數(shù)組包含單個元素

  • temp 的值計算為 1。

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

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

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

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

 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}");

    }

或調(diào)試您的代碼


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

TA貢獻(xiàn)1895條經(jīng)驗 獲得超7個贊

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


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

此方法適合您。如果要將最小值設(shè)置為1,那么您有多種選擇。其中之一是將 mini 和 maxi 類型更改為可為空的整數(shù)(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}");

}


查看完整回答
反對 回復(fù) 2022-06-18
  • 3 回答
  • 0 關(guān)注
  • 186 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號