【问题标题】:Validate User Input, check if input is positive number and not string of characters验证用户输入,检查输入是否为正数而不是字符串
【发布时间】:2018-08-18 08:14:23
【问题描述】:
我正在尝试编写一个可以在进入下一部分之前验证用户输入的程序,但我目前对此感到困惑。每当我先输入负值时,它将绕过条件或崩溃。
如果我输入“A”,它将显示“请输入有效数字”
如果我输入“-1”,它会显示“请输入一个正数”
但是在我输入-1后不久,如果我输入另一个负值,它会绕过条件并接受负值,而输入字符会导致程序崩溃。
我想在这里实现一个程序,可以
判断Input是否为数字而非字母或字符串,判断是否为正数
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int Users = 0;
boolean isNumber;
System.out.print("Enter the number of Users ");
do {
if (input.hasNextInt()) {
Users = input.nextInt();
isNumber = true;
if (Users < 0) {
System.out.print("Please enter a positive number ");
Users = input.nextInt();
}
} else {
System.out.print("Please enter a valid number ");
isNumber = false;
input.next();
}
} while (!(isNumber));
}
【问题讨论】:
标签:
java
validation
input
【解决方案1】:
如果 isNumber 小于 0,则不会将 False 设置为另一个数字,它不会检查它是否为负,因为isNumber 将是True,这意味着while 循环将不再运行。
要解决此问题,请将 isNumber = False; 添加到 if (Users<0){ 代码块的末尾。
【解决方案2】:
我发现您的代码存在三个问题。第一个是 isNumber 被设置为 true 即使输入是负数,所以我建议您仅在验证它不是负数后才将其设置为 true。
第二个问题是在你的if (Users < ) { ... } 块中,你得到了input.nextInt()。您真的应该只进入 do-while 循环的下一次迭代,并在下一次迭代中获取下一个输入。
第三,你应该将isNumber初始化为false;
试试这个代码:
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int Users = 0;
boolean isNumber = false;
System.out.print("Enter the number of Users ");
do {
if (input.hasNextInt()) {
Users = input.nextInt();
if (Users < 0) {
System.out.print("Please enter a positive number ");
// Remove this line:
// Users = input.nextInt();
} else {
// Moved this to an else block:
isNumber = true;
}
} else {
System.out.print("Please enter a valid number ");
// remove this because it's already initialized to false:
// isNumber = false;
input.next();
}
} while (!(isNumber));
}