如何防止错误消息在 Java 中重复出现?
How do I prevent an error message from repeating in Java?
我正在尝试编写一个程序来计算阶乘,但我无法弄清楚为什么如果我输入字母而不是整数,错误消息会显示两次。
我觉得这个问题与 第 29 行 c = sc.next().charAt(0);
有关,但我不确定如何解决它。感谢任何帮助。
我的程序:
public class Factorials {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
char c = 'Y';
int num = 0;
do
{
System.out.print("Enter a number to calculate its factorial: ");
while (!sc.hasNextInt()) {
System.out.println("Invalid Entry - Enter only Integers! Try Again: ");
sc.nextLine();
}
int result = 1;
num = sc.nextInt();
for(int i = 1; i <= num; i++) {
result = result * i;
}
System.out.println("The factorial of " + num + " is: " + result);
System.out.println("Do you wish to continue? Y/N: ");
c = sc.next().charAt(0);
}while(c == 'y' || c == 'Y');
sc.close();
}
}
简单修复:将代码中的 sc.nextLine();
更改为 sc.next()
,您应该可以开始了。发生此错误是因为 .nextLine()
将 enter/return 键视为一个单独的字符,而 .next()
则不会。 (输入 'y' 或 'n' 后按下回车键:如果您尝试,如果您第一次输入字母 运行,错误消息不会打印两次程序)。
旁注:您可能希望它是 .print(/*invalid input sentence*/)
而不是 .println()
以配合您接收其他数值的方式。
否则,你很好!
在c = sc.next().charAt(0);
之后添加sc.nextLine();
Finds and returns the next complete token from this scanner.
A complete token is preceded and followed by input that matches
the delimiter pattern
如 jdk 文档所示,'sc.next' 方法将在到达 space 时 return,输入或 return。所以当你回车输入'y'时,回车符还在buffer中。您可以将 sc.nextLine 分配给变量,例如
String str = sc.nextLine();
System.out.println(str);
您可以看到输入字符和您输入的字符。
@TheSj 和@Lahiru Danushka 的回答都可以解决这个问题。
我正在尝试编写一个程序来计算阶乘,但我无法弄清楚为什么如果我输入字母而不是整数,错误消息会显示两次。
我觉得这个问题与 第 29 行 c = sc.next().charAt(0);
有关,但我不确定如何解决它。感谢任何帮助。
我的程序:
public class Factorials {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
char c = 'Y';
int num = 0;
do
{
System.out.print("Enter a number to calculate its factorial: ");
while (!sc.hasNextInt()) {
System.out.println("Invalid Entry - Enter only Integers! Try Again: ");
sc.nextLine();
}
int result = 1;
num = sc.nextInt();
for(int i = 1; i <= num; i++) {
result = result * i;
}
System.out.println("The factorial of " + num + " is: " + result);
System.out.println("Do you wish to continue? Y/N: ");
c = sc.next().charAt(0);
}while(c == 'y' || c == 'Y');
sc.close();
}
}
简单修复:将代码中的 sc.nextLine();
更改为 sc.next()
,您应该可以开始了。发生此错误是因为 .nextLine()
将 enter/return 键视为一个单独的字符,而 .next()
则不会。 (输入 'y' 或 'n' 后按下回车键:如果您尝试,如果您第一次输入字母 运行,错误消息不会打印两次程序)。
旁注:您可能希望它是 .print(/*invalid input sentence*/)
而不是 .println()
以配合您接收其他数值的方式。
否则,你很好!
在c = sc.next().charAt(0);
sc.nextLine();
Finds and returns the next complete token from this scanner. A complete token is preceded and followed by input that matches the delimiter pattern
如 jdk 文档所示,'sc.next' 方法将在到达 space 时 return,输入或 return。所以当你回车输入'y'时,回车符还在buffer中。您可以将 sc.nextLine 分配给变量,例如
String str = sc.nextLine();
System.out.println(str);
您可以看到输入字符和您输入的字符。
@TheSj 和@Lahiru Danushka 的回答都可以解决这个问题。