我编写了一个程序来确定一个素数,并且需要使用'Q'作为退出函数退出程序。以下是我写的代码。我想知道如何修改退出程序以使其正确退出的方法。
import java.util.Scanner;
public class Practice
{
public static void main(String[]args)
{
Scanner keyboard = new Scanner(System.in);
int number, i=2;
String quit;
boolean prime = true;
System.out.println("Please enter a number to determine if it is prime, to quit please enter Q.");
number = keyboard.nextInt();
quit = keyboard.nextLine();
for (i=0; i<number;i++)
{
if ((number%2==0) || (number==1) || (number%3==0))
{
prime = false;
}
}
if (prime==false)
{
System.out.println(number+" is not a prime number.");
}
else if(prime==true)
System.out.println(number+" is a prime number.");
if (quit.charAt(0)=='Q')
{ System.exit(0);}
输入'Q'时的输出是:
----jGRASP exec: java Practice
Please enter a number to determine if it is prime, to quit please enter Q.
Q
Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Scanner.java:909)
at java.util.Scanner.next(Scanner.java:1530)
at java.util.Scanner.nextInt(Scanner.java:2160)
at java.util.Scanner.nextInt(Scanner.java:2119)
at Practice.main(Practice.java:15)
----jGRASP wedge2: exit code for process is 1.
----jGRASP: operation complete.
}
}
答案 0 :(得分:1)
当通过控制台输入的内容为“Q”时,String类型的值将被赋值给int类型的变量,这是不正确的。
number = keyboard.nextInt();
在将输入分配给int变量之前,需要检查输入中的类型。
答案 1 :(得分:0)
你有:
number = keyboard.nextInt();
quit = keyboard.nextLine();
想一想这里究竟发生了什么。 “Q”不是数字,因此nextInt()
,as documented会引发InputMismatchException
。在此之后,您对nextLine()
的使用没有多大意义。
您有几个选择:
Scanner.hasNextInt()
确定下一个令牌是否真的是格式正确的整数。如果没有,请将其作为字符串阅读并检查。Scanner.next()
,并在使用Integer.parseInt()
解析之前检查它是否为“Q”(准备在那里处理错误)。 Scanner.next*
函数不会隐式跳过无效值。 Scanner
只是做你告诉它做的事情,如果你告诉它抓住一个整数但输入不是一个整数,它就是正确的抱怨。您可以适当地使用Scanner
并检查可能的输入案例。
答案 2 :(得分:0)
您应该使用keyboard.nextLine()读取数字作为字符串; 并首先检查它是否包含'Q'。如果是,退出,否则执行,number = Integer.parseInt(yourVariableHere);并从那里去
答案 3 :(得分:0)
请改为尝试:
String input;
int number = 1;
int i=2;
然后这样做:
System.out.println("Please enter a number to determine if it is prime, "
+ "\nto quit, please enter Q.");
input = keyboard.nextLine();
if (input.charAt(0)=='Q')
{
System.exit(0);
}
else
{
try
{
number = Integer.parseInt(input);
}
catch(NumberFormatException nfe)
{
System.out.println("Please enter a number or Q!");
}
}