2012-03-20 59 views
-1

我有這段代碼,我想把try-catch放在while循環中。邏輯是,「當出現輸入錯誤時,程序將繼續詢問正確的輸入」。我將如何做到這一點?提前致謝。while循環中的try-catch方法?

public class Random1 { 

    public static void main(String[] args) { 

    int g; 

    Scanner input = new Scanner(System.in); 
    Random r = new Random(); 
    int a = r.nextInt(10) + 1; 


    try { 
     System.out.print("Enter your guess: "); 
     g = input.nextInt(); 
     if (g == a) { 

      System.out.println("**************"); 
      System.out.println("* YOU WON! *"); 
      System.out.println("**************"); 
      System.out.println("Thank you for playing!"); 

     } else if (g != a) { 
      System.out.println("Sorry, better luck next time!"); 
     } 
    } catch (InputMismatchException e) { 
     System.err.println("Not a valid input. Error :" + e.getMessage()); 
    } 


} 
+8

你的while循環和你自己試圖首先解決這個問題的地方在哪裏?這樣做將a)幫助你學習更多,b)向我們展示你的假設是不正確的,並讓我們提供更好的指導幫助,並且c)大大提高我們對你的尊重。 – 2012-03-20 04:32:21

+0

爲什麼要寫這個問題的答案?讓OP首先明確問題。 – 2012-03-20 04:37:26

+0

你是對的。對不起。也謝謝你。我只是不擅長自學。再次,我很抱歉。 – singko 2012-03-20 04:38:52

回答

1

您可能只是有一個布爾標誌,您可以根據需要翻轉。下面

bool promptUser = true; 
while(promptUser) 
{ 
    try 
    { 
     //Prompt user 
     //if valid set promptUser = false; 
    } 
    catch 
    { 
     //Do nothing, the loop will re-occur since promptUser is still true 
    } 
} 
1
boolean gotCorrect = false; 
while(!gotCorrect){ 
    try{ 
    //your logic 
    gotCorrect = true; 
    }catch(Exception e){ 
    continue; 
    } 

} 
0

僞代碼在你的catch塊寫'continue;' :)

2

在這裏,我已經使用休息繼續關鍵字。

while(true) { 
    try { 
     System.out.print("Enter your guess: "); 
     g = input.nextInt(); 
     if (g == a) { 

      System.out.println("**************"); 
      System.out.println("* YOU WON! *"); 
      System.out.println("**************"); 
      System.out.println("Thank you for playing!"); 

     } else if (g != a) { 
      System.out.println("Sorry, better luck next time!"); 
     } 
     break; 
    } catch (InputMismatchException e) { 
     System.err.println("Not a valid input. Error :" + e.getMessage()); 
     continue; 
    } 
} 
+0

'break'位於錯誤的位置,但這是一種有效的方法。 – erickson 2012-03-20 04:36:20

+0

@erickson你能說出如何在錯誤的地點休息嗎? – 2012-03-20 04:37:39

+0

@erickson我明白了,謝謝。 – 2012-03-20 04:39:21

1

您可以添加break;作爲try塊中的最後一行。這樣,如果拋出任何錯誤,控制將跳過break並移動到catch塊中。但如果不是例外,程序將運行到break語句,該語句將退出while循環。

如果這是唯一的條件,那麼循環應該看起來像while(true) { ... }