**感谢Adi219&查尔斯斯宾塞帮助完成了我的第1部分。
现在我正在尝试一种不同的方法,通过在输入存储到数组之前验证输入,它在大多数情况下看起来很好,但异常只运行一次。
这是我输入来测试验证的
1)我输入“a”,它返回“输入0到100之间的数字”这是正确的。
2)我输入1000,并返回“无效年龄”,我可以告诉我的IF条件有效。
3)输入用户名1的正确值时没有问题
当我尝试在用户2上运行相同的测试时出现问题。在输入用户名1的正确值后,我再次输入“A”,程序只绕过所有这些条件并且没有捕获整数值。
import java.util.Scanner;
public class test2
{
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int i = 0;
double x = 0;
double Total = 0;
double Average = 0;
int Users = 2; //I fixed a number for testing purpose
boolean isNumber =false;
double ages[] = new double[Users];
for(int counter =0; counter < Users; counter++){
System.out.print("Enter the age for users "+(counter+1)+ ": ");
do{
try {
x =input.nextDouble();
if(x<0 || x>100){
System.out.print("Invalid age.. try again.. ");
}else if(x>0 || x<100){isNumber=true;}
}catch(Exception e){
System.out.print("Please enter number between 0 to 100 ");
input.next();
}
}while(!(isNumber));
System.out.println("User Age is "+ x); //Just to check input user's age
}
}
}
答案 0 :(得分:0)
因为整个do / while循环基于isNumber是否为false,如果为user1输入有效数字,则isNumber变量设置为true,并且do / while循环将永远不会再次运行,因为您从未设置isNumber回到假。有两个地方我将isNumber设置为false,我已经标记了它们。但我很确定这一切都应该重写。例如,没有必要这样做:
else if(x > 0 || x < 100)
因为您已经完成了:
if(x<0 || x>100)
如果您将第一个条件设为x&lt; = 0 || x&gt; = 100,没有必要再做if语句。
for(int counter = 0; counter < Users; counter++)
{
System.out.print("Enter the age for users "+(counter+1)+ ": ");
do{
try {
x = input.nextDouble();
if(x<0 || x>100)
{
isNumber = false; // Set to false if invalid number
System.out.print("Invalid age.. try again.. ");
}
else if(x > 0 || x < 100)
{isNumber = true;} // If the age for user1 is valid, isNumber is set
// to true
}catch(Exception e)
{
isNumber = false; // Set to false if number invalid
System.out.print("Please enter number between 0 to 100 ");
input.next();
}
}while(!(isNumber));