while循环在设置为false后不重复

时间:2013-02-28 19:48:11

标签: java while-loop

  boolean gotGoodGenInput = false;
  while (!gotGoodGenInput)
  {

    gotGoodGenInput = true;

    String inputGen = JOptionPane.showInputDialog
    (
      "Enter your Generation \n" +
      "It must be a number from 0 to 25"
    ); 

    if(inputGen != null)
    {  

      if (inputGen.isEmpty() || !inputGen.matches("[0-9]*")) 
      {
        JOptionPane.showMessageDialog
        (
          null,
          "Please input a number from 0 to 25",
          "Error",
          JOptionPane.ERROR_MESSAGE
        );
        gotGoodGenInput = false;
      }

      int GenNumber = Integer.parseInt(inputGen);

      if (GenNumber < 0 || GenNumber > 25)
      {
        JOptionPane.showMessageDialog
        (
          null,
          "Your number can't be less than 0 or greater than 25",
          "Error",
          JOptionPane.ERROR_MESSAGE
        );
        gotGoodGenInput = false;
      }

    }
    else
    {
      System.exit(0);
    }
  }

您好我遇到的问题是,如果用户输入“a”(作为示例),那么他们将收到错误“请输入0到25之间的数字”

 if (inputGen.isEmpty() || !inputGen.matches("[0-9]*"))

并且当它遇到gotGoodGenInput = false时它应该重启循环;

但是它会继续下一个尝试解析int的部分,但当然它会出错,因为“a”不是int

所以我的问题是为什么当它到达gotGoodGenInput = false时它没有重新开始;在第一个if语句中。

3 个答案:

答案 0 :(得分:3)

行后

gotGoodGenInput = false;

添加行

continue;

将从while循环的开头重新开始。

答案 1 :(得分:2)

仅设置gotGoodGenInput=false不足以重启循环。您已经更改了变量的值,但是您没有告诉程序不要继续循环。

您可能希望在每次将continue;设置为gotGoodGenInput后添加false语句,以获取您描述的行为。

您可能还想探索Swing的InputVerifiers。看看这个主题:Java Swing: Implementing a validity check of input values

答案 2 :(得分:0)

if 语句后面看起来缺少 else ,您可以在其中检查字符串是空还是与整数不同。像这样它将进入 if 语句,但是继续到下一个尝试解析int的那个语句。