这是我对[m,n]区间中数字的Goldbach`s猜想问题的解决方案。代码有效但读取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);
}
}
}
答案 0 :(得分:0)
首先,你应该只使用一个 Scanner
。我认为问题在于Scanner.nextInt()
没有消费&#34;输入的new line
字符(当您在终端中输入时键入的字符)。
一种解决方法是在Scanner.nextLine()
之后调用Scanner.nextInt()
。
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();
}