Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 退出带有';Q';_Java - Fatal编程技术网

Java 退出带有';Q';

Java 退出带有';Q';,java,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 qu

我写了一个程序来确定一个素数,我被要求使用'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”时,字符串类型的值被分配给int类型的变量,这是不正确的

number = keyboard.nextInt();
需要先检查输入中的类型,然后才能将其分配给int变量。

您有:

 number = keyboard.nextInt();
 quit = keyboard.nextLine();
想一想这里到底发生了什么Q'不是一个数字,因此
nextInt()
抛出一个
输入不匹配异常。使用
nextLine()
之后就没有什么意义了

您有两个选择:

  • 使用
    Scanner.hasNextInt()
    确定下一个标记是否确实是格式正确的整数。如果不是,则将其作为字符串读取并检查
  • 始终使用
    Scanner.next()
    ,并在使用
    Integer.parseInt()
    对其进行解析之前检查它是否为“Q”(准备处理其中的错误)

Scanner.next*
函数不会隐式跳过无效值。
扫描器
只执行您让它执行的操作,如果您让它获取一个整数,但输入不是整数,它会理所当然地抱怨。您可以适当地使用
扫描仪
,并检查可能的输入情况。

您应该使用键盘.nextLine()以字符串形式读取数字; 并首先检查它是否包含“Q”。如果是,则退出,否则执行,number=Integer.parseInt(yourVariableHere);然后从那里开始

试试这个:

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

'Q'
不是一个数字
 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!");
      }  
 }