0

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

  //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;  

}

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

4

2 回答 2

0

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

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

你也没有提到调用 hasNextInt 时遇到了什么样的异常,但显然这只能是一个IllegalStateException. 我建议查看http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html上的 Java 文档,或者阅读您的相关课程资料。

于 2013-10-06T07:42:14.770 回答
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;
}
于 2013-11-06T05:49:27.330 回答