有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

JAVAutil。scanner类Java读取的输入值太多

这是我对[m,n]区间数的哥德巴赫猜想问题的解答。代码可以工作,但读取a和m的值时存在问题。如果我不引入超过2个输入值(比如4个或更多),则不会发生任何事情。如果我这样做,第一个值被分配给m,最后一个值被分配给n。为什么会发生这种情况?我该怎么纠正呢

public class GoldbachConjecture {

    public static void Goldbach(int x) {
        int ok=0;
        for (int i = 3; i < x / 2 && ok==0; i++) {
            if (isPrime(i) && isPrime(x - i)) {
                System.out.println("The number is " + x + " Prime Numbers are " + i + " " + (x - i));
                ok=1;
            }
        }
    }

    public static boolean isPrime(int x) {
        for (int i = 2; i < x / 2; i++) {
            if (x % i == 0) {
                return false;
            }
        }
        return true;
    }


    public static void main(String[] args) {


        System.out.print("Give the interval" );

        Scanner in1= new Scanner(System.in);
        int m = in1.nextInt();

        Scanner in2=new Scanner(System.in);
        int n=in2.nextInt();

        for(int nr = m; nr <= n; nr++)
        {
         if(nr>2 && nr%2==0) 
              Goldbach(nr);
          } 
}
}

共 (1) 个答案

  1. # 1 楼答案

    首先,你应该只使用一个。我认为问题在于Scanner.nextInt()不会“使用”输入的new line字符(在终端中按enter键时键入的字符)

    一种解决方法是在Scanner.nextInt()之后调用Scanner.nextLine()

    Scanner sc = new Scanner(System.in);
    int m = sc.nextInt();
    sc.nextLine(); // consuming last new line.
    

    更新:您也可以尝试这种解决方法(如https://stackoverflow.com/a/13102066/4208583中所示):

    Scanner sc = new Scanner(System.in);
    int m;
    try {
        m = Integer.parseInt(sc.nextLine());
    } catch (NumberFormatException e) {
        e.printStackTrace();
    }