不使用try catch异常进行输入验证

时间:2013-10-06 07:33:02

标签: java validation input

我正在编写一个程序,计算一个人多年后的投资。我提示用户输入他们的名字,他们将投资的金额,利率和年数。我应该使用if ... else语句验证输入。其中一项检查是查看用户是否输入了正确的数据类型。这是一个介绍java类。我们在一周前完成了关于方法的章节,所以这是初学者的事情。我似乎可以弄清楚如何进行数据类型检查。我为我的int类型尝试了hasNextInt,但是我得到了一个我们根本没有学到的异常。我在网上找到了一些关于模式和匹配课程的信息,但是我们还没有看到很多东西。这是我为获得正确输入而编写的方法之一。

  //Define method for input validation, integer type
  public static int getValidInt(String messagePrompt, String messagePrompt2, String messagePrompt3){
  Scanner input = new Scanner(System.in);//Create scanner
  int returnValue;
  int j = 0;
    do {//Start validation loop
        System.out.printf(messagePrompt); //Print input request        
        returnValue = input.nextInt();

    if (returnValue <= 0) { //Check if user entered a positive number 
        System.out.println(messagePrompt2);//Print error message
      }
    else if (!input.hasNextInt()) {
        System.out.println(messagePrompt3);//Print error message

        }          
      else {
          j++;
          }
    } while (j == 0);//End validation loop

  return returnValue;  

}

我不确定我是否有正确的支票顺序。欢迎任何帮助。谢谢。

2 个答案:

答案 0 :(得分:0)

如果它只是4个预定义的输入字段,而您不必检查其他内容,那么我没有理由在这里使用do while循环。虽然也许我没有得到这个方法应该做的事情,你是否返回某种整数来定义输入是否有效还是你真的必须存储值?如果是前者,为什么不直接返回布尔值或枚举?

我也不明白你为什么只是第一次调用nextInt,但是对于下一个你正在检查它是否有nextInt。

另外,您没有提到在调用hasNextInt时遇到的异常类型,但显然这只能是IllegalStateException。我建议您在http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html查看Java文档,或阅读相关课程资料。

答案 1 :(得分:0)

调用序列nextInt()hasNextInt()。第一个用于从输入读取值,第二个用于查看值类型是否为int。因此,您必须调用hasNext[Type](),然后调用next[Type]

让我们先纠正这两个,如下所示。

if (scnr.hasNextInt()) {
    int userChoice =  scnr.nextInt();
} else {
    // input is not an int
}

现在让我们更正您的代码以获得有效的int。

public static int getValidInt(String messagePrompt, String messagePrompt2, String messagePrompt3) {
    Scanner input = new Scanner(System.in);// Create scanner
    int returnValue = -1;
    boolean incorrectInput = true;

    while (incorrectInput) {

        System.out.printf(messagePrompt); // Print input request

        if (input.hasNextInt()) {
            returnValue = input.nextInt();

            if (returnValue <= 0) { // Check if user entered a positive number
                System.out.println(messagePrompt2);// Print error message
            } else {
                incorrectInput = false;
            }
        } else {
            input.next();
            System.out.println(messagePrompt3);// Print error message
        }
    }
    return returnValue;
}