我必须构建一个用户输入模板,您可以在其中输入介于100和200之间的数字。如果输入“goodbye”,则需要退出,如果输入字母,符号,数字范围外的数字等。需要提示你再试一次。如果你输入一个范围内的数字,它将转到另一个问题(我没有在下面的代码中包含它)。
我几乎可以完成所有工作。如果您第一次输入正确的数字,它就有效。 “再见”和错误的角色功能也有效。但是,如果您输入错误的字符(数字或字母),然后,当它提示您再次尝试时,您在该范围内输入了一个正确的号码,它不接受它并再次提示您再试一次。
我需要弄清楚如何输入错误的字符(例如字母或数字超出范围),然后当它提示您再次尝试并且您将数字设置在100-200之间时,它会工作并退出循环(这将使它能够继续下一个问题/循环)。
这是我的代码:
Scanner console = new Scanner(System.in);
String Input;
int Number;
boolean isValid = true;
do {
System.out.println("Enter a valid number:");
Input = console.nextLine();
if (Input.equals("goodbye") || Input.equals("GOODBYE")){
System.out.println("You have left");
System.exit(0);
}
char[] numberTester = Input.toCharArray();
for (int i = 0; i<Input.length(); i++){
Character currentChar = new Character (numberTester[i]);
if (!currentChar.isDigit(numberTester[i])){
isValid = false;
System.out.println("Invalid. Try again.");
i = Input.length();
}
if (isValid == true){
Number = Integer.parseInt(Input);
if (Number < 100 || Number > 200){
isValid = false;
System.out.println("Invalid. Try again.");
}
}
}
} while (isValid == false);
}
}
答案 0 :(得分:1)
在开始时,isValid
标记设置为true
。当此标志为false
时,您的do-while循环会运行。如果您在第一轮中输入有效的内容,则退出循环。但是如果你输入的内容无效,你可以将你的旗帜设置为false
并永远不会再回来,所以它会永远循环
将isValid
标志设置为do while
循环中的第一个语句应该可以解决您的问题。
[...]
do{
isValid = true;
[...]
} while (isValid == false);
答案 1 :(得分:0)
我认为这项任务的目的是学习如何处理异常。 parseInt
会抛出NumberFormatException
。使用这个对你有利,而不是toCharArray废话。
public static void main(String args[]) {
Scanner console = new Scanner(System.in);
String input;
int number;
boolean isValid;
do {
isValid = true; // reset the validity
System.out.print("Enter a valid number: ");
input = console.nextLine();
if (input.equalsIgnoreCase("goodbye")) {
System.out.println("You have left");
System.exit(0);
}
try {
number = Integer.parseInt(input);
if (number < 100 || number > 200) {
isValid = false;
System.out.println("Invalid. Try again.");
}
} catch (NumberFormatException e) {
isValid = false;
System.out.println("Invalid. Not a number. Try again.");
}
} while (!isValid);
}
答案 2 :(得分:0)
看起来这个问题来自这样一个事实:一旦你将isValid变量设置为false,它就永远不会变为真,所以do-while循环将无限循环。
解决此问题的一种方法是在do-while循环的每个循环开始时将isValid变量设置为true,这样如果在循环中没有任何触发它变为false,则循环将退出结束,因为条件不会成真。