2015-10-14 29 views
0

所以我的代碼適用於所有測試用例,除了只有兩個整數時。 例如,如果用戶輸入:終止數爲-1,然後輸入1,2,然後再次輸入-1,最小數是1,1而不是1,2Java:兩個最小的數字helo

終止號碼只是結束序列/程序的方式。

public static void main(String[] args) { 
     double num; 
     double min = 0; 
     double min2 = 0; 

     System.out.println("Enter terminating value:"); 
     int term = IO.readInt(); 

     System.out.println("Enter next value:"); 
     num = IO.readDouble(); 

     if(num == term){ 
      IO.reportBadInput(); 
      main(args); 
     } 

     int count = 0; 
     min = num; 
     min2 = num; 

     do{ 
      num = IO.readDouble(); 

      if(num!= term && num < min) { 
       min2 = min; 
       min = num; 
      } 
      else if (num!= term && num < min2) { 
       min2 = num; 
      } 
      count++; 
     }while (num != term); 

     if(count < 2){ 
      IO.reportBadInput(); 
      main(args); 
     } 

     else{ 
     IO.outputDoubleAnswer(min); 
     IO.outputDoubleAnswer(min2); 
     } 

    } 
+1

爲什麼要禁止第一輸入是結尾值,但第二個可以是任意值?你應該決定一致的行爲。要麼禁止或允許第一個和第二個輸入的終止值 – Paul

+0

什麼?終止值是結束程序的編號。第一個數字必須是一個術語。數字,第二個是數字輸入開始的地方,如果它的終止號再次出現程序運行錯誤並重新啓動。 – x2FrostFire

+0

你的代碼讀取終止號碼,如果**下一個**值是終止號碼,也會打印一條錯誤消息。但輸入終止號後的第二個值可能是任何數字,包括終止值,這是一個相當奇怪的實現。 – Paul

回答

0

與您的代碼的問題在於最低值設定爲這是第一次輸入的號碼。這是不好的,因爲如果用戶首先輸入最小值,那麼minmin2已經包含最小值。這意味着條件input < min2總是false,導致min2始終包含用戶首先輸入的值。

要解決該問題,只需將值min2設置爲大於用戶可以輸入的任何其他值的值(例如Double.MAX_VALUEDouble.POSITIVE_INFINITY)。

就像你的代碼的錯誤處理部分提示一樣:如果在提醒用戶輸入無效後再次撥打main,請確保在該調用後面添加return或者在調用後繼續執行main方法完成。事情是這樣的:

if (count < 2) { 
    IO.reportBadInput(); 
    main(args); 
    return; 
} 
+0

非常感謝!並感謝錯誤處理 – x2FrostFire