Java 为什么我可以用biginteger变量获取while条件的过程

Java 为什么我可以用biginteger变量获取while条件的过程,java,Java,当条件不等于1时,我想使while循环工作。 我想做些什么 虽然(biginteger不是1),但在我的代码中它不起作用 while (hasil.compareTo(BigInteger.valueOf(1)) == 0) { hasil = d.multiply(BigInteger.valueOf(b)).remainder(BigInteger.valueOf(m)); out.println(d + " x " + b + "mod " + m + "=" + has

当条件不等于1时,我想使while循环工作。 我想做些什么 虽然(biginteger不是1),但在我的代码中它不起作用

while (hasil.compareTo(BigInteger.valueOf(1)) == 0) {
    hasil = d.multiply(BigInteger.valueOf(b)).remainder(BigInteger.valueOf(m));

    out.println(d + " x " + b + "mod " + m + "=" + hasil);

    d = d.add(BigInteger.ONE);            
}
上述代码段相当于以下内容:

while (BigInteger.ONE.equals(hasil))  // hasil == 1
要检查
hasil
是否等于
BigInteger.ONE
,必须否定该条件:

while (!BigInteger.ONE.equals(hasil)) // hasil != 1

只需修改条件

while (hasil.compareTo(BigInteger.valueOf(1)) != 0) 

正如@khelwood所提到的,当您寻找不等于1的值时,

while条件中的逻辑是错误的,并且非常复杂,不容易发现。您可以检查语句体中的某些内容,并使用
break
退出循环,而不是在
while
条件中执行单个组合语句

下面是一个示例,它使用一些语句来明确比较在做什么,以及循环何时退出

while (true) {

    // do other things

    int result = hasil.compareTo(BigInteger.valueOf(1));
    boolean valuesAreEqual = (result == 0);
    if (valuesAreEqual) {
        break;
    }
}

您的while条件正在测试您的变量是否等于1.0等于-1减1大,因此
!=0
while (true) {

    // do other things

    int result = hasil.compareTo(BigInteger.valueOf(1));
    boolean valuesAreEqual = (result == 0);
    if (valuesAreEqual) {
        break;
    }
}