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语句中。
答案 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的那个语句。