2017-09-22 65 views
3

我想確定每個用戶提供的輸入是maxmin他們的所有輸入,然後將該輸入指定給一個變量highlow需要幫助確定用戶輸入的最大和最小

int inputnum = 0; 
    double sum = 0; 
    double lastinput = 0; 
    double high; 
    double low; 
    double average; 
    Scanner input = new Scanner(System.in); 
    high = 0; 
    low = 0; 
do { 
    System.out.println("Enter a number. Type 0 to quit."); 
    lastinput = input.nextDouble(); //reads input 
    sum += lastinput; //add to sum 
    if (lastinput != 0) { 
     inputnum += 1; //counts number of inputs (except 0) 
    } 
    if (lastinput > high && lastinput != 0) { 
     high = lastinput; 
    } 
    if (lastinput < low && lastinput != 0) { 
     low = lastinput; 
    } 

    average = (sum/inputnum); 

} while (lastinput !=0); //repeat unless user inputs 0 

的問題是,我不能沒有分配給它的值(例如0)聲明變量。如果用戶輸入357例如low值仍然定義爲0

回答

2

問題是與您的以下條件:

if (lastinput < low && lastinput != 0) { 
    low = lastinput; 
} 

注意,變量low爲0開始。所以,如果你的實際最小爲大於0,則不會影響low的價值,因爲它是0.可以有多個邏輯的解決方案,這一點:

  1. 使用哨兵值:初始化低配雙可能的最高值,使得用戶輸入始終較低,因此影響low

    double low = Double.MAX_VALUE; 
    
  2. 變化的值,如果條件:你可以改變if條件以考慮的事實,初始值是0。

    if (low==0 || (lastinput < low && lastinput != 0)) { 
        low = lastinput; 
    } 
    
+1

如果沒有給出輸入,第二種解決方案也將擺脫第一種解決方案的奇怪行爲(在這種情況下,第一種解決方案將具有「低」>「高」)。 +1 –

+0

是@JiriTousek。但是,這只是一個角落案例,可以照顧程序員也想要的任何方式。它從編碼器到編碼器。 – 97amarnathk

2

那是因爲你intialize low到零,您輸入的所有值都較大,所以它永遠不會被更新。您必須將其分配給可能的最高值 - low = Double.MAX_VALUE;,因此所有其他值都會低於此值。

同樣,你應該初始化高達

high = Double.MIN_VALUE; 
+1

'double'它:) – nullpointer

+2

@nullpointer好,謝謝:) – TDG

+0

多個測試案例,這個工程完全按照我的期望。然而,當我輸入「-1」,「-2」,「3」,然後「0」,我的最小值被顯示爲「4.9E-324」。這是什麼原因造成的? – bigfacts

1

您應該使用的最大值爲low默認或者用於非負投入的條件lastinput < low將始終是false和0仍然是你的輸出。

double low = Double.MAX_VALUE; 
0

lowhigh的值可以由您的第一輸入你的循環前可。