0
  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 语句中。

4

3 回答 3

3

线后

gotGoodGenInput = false;

添加行

continue;

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

于 2013-02-28T19:52:56.907 回答
2

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

您可能希望continue;在每次设置后添加一个语句gotGoodGenInputfalse获得您描述的行为。

您可能还想探索 Swing 的 InputVerifiers。查看此线程:Java Swing:实现输入值的有效性检查

于 2013-02-28T19:58:29.000 回答
0

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

于 2013-02-28T19:56:47.207 回答