我对Java非常陌生,作为大学课程的一部分,我必须编写一个执行一些基本功能的程序。该程序的一部分是它需要计算用户输入的数字的阶乘。如果用户输入一个负数,那么它必须提示输入一个正数。我有做到这一点。
但是,如果用户输入分数(例如2.2),则程序应向用户显示错误并提示输入有效数据。我相信应该实施某种排序或尝试捕获,但是到目前为止,在花了很多时间之后,我仍然无法成功地使它起作用。有什么想法如何使程序捕获InputMismatchException错误并提示用户再次输入?
该程序的相关代码块在下面...
fscanf(fp, "%d(%le)\n", &varInt, &varDouble);
答案 0 :(得分:0)
您可以使用Double
类来解析用户输入,然后仅获取正确的值。像这样:
public static void factorialNumber() {
int factorial = 1;
boolean valid;
int number = 0;
String userInput;
do {
System.out.println("Please enter a number: ");
userInput = sc.nextLine();
valid = validateUserInput(userInput);
} while (!valid);
number = Double.valueOf(userInput).intValue();
System.out.print("The factorial is: " + number + " ");
for (int i = 1; i <= number; i++) {
factorial *= i;
if ((number - i) > 0) {
System.out.print("x " + (number - i) + " ");
}
}
System.out.println("= " + factorial);
}
private static boolean validateUserInput(String userInput) {
if (userInput == null) {
System.out.println("You should enter a number!");
return false;
}
Double userInputNumber;
try {
userInputNumber = Double.valueOf(userInput);
} catch (Exception e) {
System.out.println("Please enter a valid number value.");
return false;
}
if (userInputNumber <= 0) {
System.out.println("ERROR Please enter a positive number");
return false;
} else if (userInputNumber - userInputNumber.intValue() > 0) {
System.out.println("ERROR You entered a fractional number!");
return false;
}
return true;
}