我想在用户的输入是非整数值,小于1的整数值或大于3的整数值时执行while循环。一旦输入有效,我将使用它。但是,循环仅在用户输入非整数值时有效。我已经完成了逻辑,我仍然不确定是什么问题。
代码:
Scanner scnr = new Scanner(System.in);
do {
System.out.println("Please enter an integer value 1-3 for the row.");
while((scnr.hasNextInt() && (scnr.nextInt() > 3)) || (scnr.hasNextInt() && (scnr.nextInt() < 1)) || (!scnr.hasNextInt()))
{
System.out.println("Your input is not valid.");
System.out.println("Please enter an integer value 1-3 for the row.");
scnr.next();
}
row = scnr.nextInt() - 1;
答案 0 :(得分:1)
“虽然”本身运作良好。在这种情况下不需要“做”。这是你的代码:
Scanner scnr = new Scanner(System.in);
System.out.println("Please enter an integer value 1-3 for the row.");
while((scnr.hasNextInt() && (scnr.nextInt() > 3)) || (scnr.hasNextInt() && (scnr.nextInt() < 1)) || (!scnr.hasNextInt()))
{
System.out.println("Your input is not valid.");
System.out.println("Please enter an integer value 1-3 for the row.");
scnr.next();
}
int row = scnr.nextInt() - 1;
当你想要至少执行一次代码然后检查“while”条件时,你需要“do”。
每次调用nextInt实际上都需要输入中的下一个int。所以,最好只使用一次:
int i;
while((i=scnr.hasNextInt() && (i > 3)) || (scnr.hasNextInt() && (i < 1)) || (!scnr.hasNextInt()))
答案 1 :(得分:0)
我对此并不完全确定,但问题可能是多次调用scnr.nextInt()
(因此您可能会将值赋予字段以避免这种情况)。
一个易于阅读的解决方案是在他的评论中引入一个名为@Vikrant的测试变量,例如:
System.out.println("Please enter an integer value 1-3 for the row.");
boolean invalid=true;
int input=-1;
while(invalid)
{
invalid=false;
if(scnr.hasNextInt())
input=scnr.nextInt();
else
invalid=true;
if(input>3||input<1)
invalid=true;
if(!invalid)
break;
System.out.println("Your input is not valid.");
System.out.println("Please enter an integer value 1-3 for the row.");
scnr.next();
}