【问题标题】:Validate User Input, check if input is an integer and within range验证用户输入,检查输入是否为整数且在范围内
【发布时间】:2018-03-10 05:18:10
【问题描述】:

**感谢 Adi219 和 Charles Spencer 帮助我完成第 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
	}
   	}
}

【问题讨论】:

  • 请阅读 Java 命名约定。变量名以小写字母开头。并考虑在您的问题中省略称呼部分。使用 cmets 表示感谢。问题应仅与技术内容有关。
  • 然后阅读minimal reproducible example 并相应地增强您的问题。我不知道你在期待什么以及到底会发生什么。不要只是抛出一些代码 - 给我们一个清晰完整的minimal reproducible example

标签: java arrays for-loop try-catch


【解决方案1】:

因为你的整个 do/while 循环是基于 isNumber 是否为 false,如果你为 user1 输入一个有效的数字,isNumber 变量被设置为 true,do/while 循环将永远不会再次运行,因为你从未设置过 isNumber回到假。有两个地方我将 isNumber 设置回 false,我已经标记了它们。但我很确定这整件事应该被重写。例如不需要这样做:

else if(x > 0 || x < 100)

因为你已经完成了:

if(x<0 || x>100)

如果您将第一个条件设置为 x = 100 不需要执行 else 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));

【讨论】:

  • 感谢 Zebrafish,在重新阅读代码之前先小睡一下。
猜你喜欢
  • 2014-04-08
  • 1970-01-01
  • 1970-01-01
  • 2021-09-01
  • 1970-01-01
  • 2021-04-05
  • 2018-08-18
  • 2011-07-20
  • 2019-07-09
相关资源
最近更新 更多