我正在编写一个程序,计算一个人多年后的投资。我提示用户输入他们的名字,他们将投资的金额,利率和年数。我应该使用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;
}
我不确定我是否有正确的支票顺序。欢迎任何帮助。谢谢。
答案 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;
}