验证用户输入,检查输入是否为整数且在范围内

时间:2018-03-10 05:18:10

标签: java arrays for-loop try-catch

**感谢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
	}
   	}
}

1 个答案:

答案 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));