2013-07-15 129 views
1

這是我目前的代碼。 我想要它做什麼,是接受多達10個數字在數組然後做,並顯示他們的一些數學。我設法做的是捕捉錯誤,然後停止程序。 我想要它做的是保持程序運行,直到用戶正確輸入一個整數。 我設法爲我的y/n字符串做類似的事情,但我不知道如何做整數數組。如何重複,直到用戶輸入一個整數?

public static void main(String[] args) { 
    Scanner input = new Scanner (System.in); 
    int i=0, numberlist[] = new int [10]; 
    String yn=null; 

     while (i < 10) 
    { 
     try { 
      System.out.print("Please enter your number\n"); 
      numberlist[i]=input.nextInt(); 
      System.out.print("Would you like to enter another number? (y/n)\n"); 
      yn=input.next(); 
      i++; 
         if (i==10) 
          {System.out.println("You reached the maximum amount of numbers\n"); 
          break;} 

         if (yn.equals("n")) 
          break; 

         else if (!yn.equals("y")) 

          while (true) 
           {System.out.print("Please only enter a 'y' for yes or 'n' for no next time.\nDo you understand? Type 'y' to continue\n"); 
           yn=input.next(); 
            if (yn.equals("y")) 
             break; 
           } 


      }catch (Exception e){System.out.println("Please enter the correct number(integers only) next time.");} 
} 

    int max=numberlist[0], min=numberlist[0], numlength = i, sum=0; 
    float average; 

    for(i = 0; i < numlength; i++) { 
     if(numberlist[i] > max) 
      max = numberlist[i];    
    } 

    for(i = 0; i < numlength; i++) { 
     if(numberlist[i] < min) 
      min = numberlist[i]; 
    } 

    for(i = 0; i < numlength; i++) { 
     sum=numberlist[i]+sum; 
    } 
    average = (float)sum/(float)numlength; 

    System.out.println("Your Sum is: "+sum); 
    System.out.println("Your Average is: "+average); 
    System.out.println("Your Maximum is: "+max); 
    System.out.println("Your Minimum is: "+min); 
} 
+0

首先,不要捕捉異常。 –

回答

1

移動對while循環內的數字的錯誤處理,以便任何異常都不會中斷流程並結束程序。

while (i < 10) { 
    try { 
     System.out.print("Please enter your number\n"); 
     numberlist[i] = input.nextInt(); 
     System.out.print("Would you like to enter another number? (y/n)\n"); 
     yn = input.next(); 
     i++; 
     if (i == 10) { 
      System.out.println("You reached the maximum amount of numbers\n"); 
      break; 
     } 

     if (yn.equals("n")) 
      break; 
     else if (!yn.equals("y")) 
      makeUserUnderstand(input, 
        "Please only enter a 'y' for yes or 'n' for no next time."); 

    } catch (InputMismatchException e) { 
     makeUserUnderstand(input, 
       "Please enter the correct number (integers only) next time."); 
    } 
} 

我已經搬出普通「你明白嗎?」部分轉化爲方法。

private static void makeUserUnderstand(Scanner input, String msg) { 
    while (true) { 
     System.out.println(msg); 
     System.out.println("Do you understand? Type 'y' to continue\n"); 
     if (input.next().equals("y")) 
      break; 
    } 
} 
+0

我試着簡單地切換嘗試的位置和我原來的代碼。當我輸入一個非整數時,它給了我錯誤,告訴我再次輸入一個數字,但它不會等待輸入並永遠循環。爲什麼會發生這種情況,我該如何解決這個問題? –

+0

你可能用大括號犯了一個錯誤。或者用你當前的代碼更新問題,或者簡單地複製我的* while循環和輔助方法。我測試過它,它工作。 –

+0

好的我更新了它。 –

0

首先,不要捕捉異常。您應該只捕獲您關心和知道可能發生在您的代碼中的特定異常。任何其他異常都表明存在嚴重問題,通過捕獲它們,您可能會意外地壓制指示需要注意的錯誤的重要信息。

這樣說,你可以通過只包裝讀取輸入的代碼來使你的try塊變小來解決你的問題。另外,創建一個循環來檢查指示是否發生錯誤的標誌。當輸入解析爲整數時發生錯誤時,可以在catch塊中設置該標誌。

如果您在將我的描述轉換爲代碼時遇到困難,請隨時詢問有關的詳細信息。

相關問題