【发布时间】:2016-05-16 15:19:40
【问题描述】:
我必须建立一个用户输入模板,您可以在其中输入100到200之间的数字。如果输入“再见”,则需要退出,如果输入字母,符号,范围之外的数字等需要提示您再试一次。如果您输入范围内的数字,它将转到另一个问题(我没有将其包含在下面的代码中)。
我几乎可以完成所有工作。如果您第一次输入正确的数字,它会起作用。 “再见”和错误字符功能也有效。但是,如果您输入了错误的字符(数字或字母),然后当它提示您重试时,您在范围内输入了一个正确的数字,它不接受它并再次提示您重试。
我需要弄清楚如何输入错误的字符(例如超出范围的字母或数字),然后当它提示您重试并且您输入一个介于 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);
}
}
【问题讨论】:
-
旁白:Java 中的编码约定是变量名以小写字母开头
-
当输入有效时,您永远不会将 isValid 设置为 true。因此,如果 isValid 设置为 false 一次(如您所说),即使输入有效,它也永远不会退出循环。
-
你最好使用 String.equalsIgnoreCase() 而不是 String.equals() 两次。此外,您可以将 try-catch 与 Integer.parseInt 一起使用,并完全避免
for循环。 -
@pdn1227 如果您坚持检查而不是捕获 NumberFormatException,请执行 'char c = input.charAt(i); if (c '9')' 并在 "if (isValid == true)" 之前关闭 for 循环。
-
@cricket_007 是的,我知道。我更改了这篇文章的变量名称以澄清,因为我的名字一开始并不那么具体。只是忘记在发布前取下帽子。
标签: java loops input integer range