2012-03-20 84 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) { ... }