用'Q'退出java程序的问题

时间:2013-11-06 02:34:35

标签: java

我编写了一个程序来确定一个素数,并且需要使用'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.








  }

}

4 个答案:

答案 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!");
      }  
 }