我尝试编写一个程序,可以在进入下一部分之前验证用户的输入,但我目前仍然坚持这一点。每当我首先输入负值时,它将绕过条件或崩溃。
如果我输入" A" ,它会显示"请输入有效的数字"
如果我输入" -1",它将显示"请输入正数"
但是在我输入-1后不久,如果我输入另一个负值,则通过条件并接受负值,而输入字符将使程序崩溃。
我想在这里实现一个可以
的程序检查输入是否为数字而不是字母或字符串,并检查其是否为正数
<div class="middleEllipsis">
<div class="start">This is a really long file name, really long really long really long</div><div class="end">file name.txt</div>
</div>
&#13;
答案 0 :(得分:1)
如果isNumber
小于0,您就不会将False
设置为isNumber
。这意味着,如果您输入了负值(并且您还没有在之前输入了一个字符串),你的程序会再次询问你另一个号码,它不会检查它是否为True
为while
,这意味着{{1}循环将不再运行。
要解决此问题,请将isNumber = False;
添加到if (Users<0){
代码块的末尾。
答案 1 :(得分:0)
我发现您的代码存在三个问题。第一个是即使输入为负数,isNumber
也设置为true,所以我建议您在确认它不是负数后才将其设置为true。 / p>
第二个问题是,在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));
}