0

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

4 回答 4

1

当通过控制台输入为“Q”时,String 类型的值被分配给 int 类型的变量,这是不正确的。

number = keyboard.nextInt();

需要检查输入中的类型,然后才能将其分配给 int 变量。

于 2013-11-06T02:40:22.447 回答
0

您应该使用 keyboard.nextLine(); 将数字读取为字符串;并首先检查它是否包含'Q'。如果是,退出,否则,number = Integer.parseInt(yourVariableHere); 然后从那里去

于 2013-11-06T02:43:03.663 回答
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!");
      }  
 }
于 2013-11-06T02:48:46.743 回答
0

你有:

 number = keyboard.nextInt();
 quit = keyboard.nextLine();

想一想这里实际发生的事情。'Q' 不是数字,因此nextInt()如文档所述,会抛出InputMismatchException. 在此之后,您的使用nextLine()没有多大意义。

你有几个选择:

  • 用于Scanner.hasNextInt()确定下一个标记是否真的是一个格式良好的整数。如果没有,请将其作为字符串读取并检查。
  • 始终使用Scanner.next(),并在解析之前检查它是否为“Q” Integer.parseInt()(准备在那里处理错误)。

这些Scanner.next*函数不会隐式跳过无效值。只是做你告诉它做的Scanner事情,如果你告诉它抓取一个整数但输入不是整数,它理所当然地抱怨。您可以适当地使用Scanner并检查您可能的输入案例。

于 2013-11-06T02:41:26.983 回答