Java 我的do while循环只发生一次,即使我第二次输入了相同的值。为什么会这样? Scanner sc1=新的扫描仪(System.in); System.out.print(“输入高达32位的素数p值:”); BigInteger p=sc1.nextBiginger(); 而(p.isProbablePrime(1)=false&&p.compareTo(BigInteger.valueOf(2147483647))==1; { System.out.print(“对不起,您的p值必须是素数,最多32位!请重新输入:”; p=sc1.nextbiginger(); }

Java 我的do while循环只发生一次,即使我第二次输入了相同的值。为什么会这样? Scanner sc1=新的扫描仪(System.in); System.out.print(“输入高达32位的素数p值:”); BigInteger p=sc1.nextBiginger(); 而(p.isProbablePrime(1)=false&&p.compareTo(BigInteger.valueOf(2147483647))==1; { System.out.print(“对不起,您的p值必须是素数,最多32位!请重新输入:”; p=sc1.nextbiginger(); },java,while-loop,java.util.scanner,Java,While Loop,Java.util.scanner,因此,我输入了一个大于2147483647的值,我的虽然第一次运行,但第二次不运行 输入高达32位的素数p值:2147483659 抱歉,您的p值必须是素数且最多32位!请重新输入:2147483659 输入高达32位的基本q值: 当我的条件未满足时,它会跳到我的q值。尝试使用以下代码(例如,摆脱do/while): 无论发生什么情况,DO循环都将始终执行一次。 因此,您的Conditon总是计算为false(因此循环停止)。 试着这样设置 public final long c = 2147

因此,我输入了一个大于
2147483647
的值,我的
虽然第一次运行,但第二次不运行

输入高达32位的素数p值:2147483659
抱歉,您的p值必须是素数且最多32位!请重新输入:2147483659
输入高达32位的基本q值:

当我的条件未满足时,它会跳到我的
q
值。

尝试使用以下代码(例如,摆脱do/while):


无论发生什么情况,DO循环都将始终执行一次。 因此,您的Conditon总是计算为false(因此循环停止)。 试着这样设置

public final long c = 2147483647;

while(!p.isProbablePrime(1) || p.compareTo(BigInteger.valueOf(c)) == 1);
那是给你的

do{
     //do stuff here
}while(condition to break the loop)     
你能用这个吗

public static void main(String[] args) {
    Scanner sc1 = new Scanner(System.in);
    System.out.print("Enter prime p value up to 32 bits: ");
    BigInteger p = sc1.nextBigInteger();
    while (!p.isProbablePrime(1) || p.compareTo(BigInteger.valueOf(2147483647)) > 0)) {
        System.out.print("Sorry your p value must be a prime and up to 32bits! Please enter again: ");
        sc1 = new Scanner(System.in);
        p = sc1.nextBigInteger();
    }
}

您只需要一个扫描仪,因为在do/while循环中,无论您输入什么输入,第一次迭代(例如do块执行)始终是有保证的。您将p.isProbablePrime(1)与false进行比较,false将始终返回false。为什么第一个地方你要比较布尔值和==运算符。为什么你要比较2147483647?只是希望它高达32位@Adderyea我改成了这个,它仍然在做同样的事情见更新的答案,我在你的while循环中将&(和)改成了| |(或)它仍然在做同样的事情,我的while循环运行一次,输入相同的值后,它将跳过我的while循环。查看参考,尝试将确定性设置为不同的值,这似乎也是此方法运行的时间(因此运行时间越长,评估越精确)
public static void main(String[] args) {
    Scanner sc1 = new Scanner(System.in);
    System.out.print("Enter prime p value up to 32 bits: ");
    BigInteger p = sc1.nextBigInteger();
    while (!p.isProbablePrime(1) || p.compareTo(BigInteger.valueOf(2147483647)) > 0)) {
        System.out.print("Sorry your p value must be a prime and up to 32bits! Please enter again: ");
        sc1 = new Scanner(System.in);
        p = sc1.nextBigInteger();
    }
}