Как сравнить значения BigInteger, которые будут использоваться как условие в цикле?

Я пытаюсь сравнить, если значение одного BigInteger (base) есть > значение другого BigInteger (prime), и если значение 'a' не равно единице. Если значение a не равно 1, оно должно выйти из цикла. Как мне их сравнить?

 Random ran = new Random();
    BigInteger prime = new BigInteger(16,ran);
    BigInteger base,a,one;
    one = new BigInteger("1");

    for (int i = 0; i < 65535; i++){

        while (base>prime){
            base = new BigInteger(16,ran);
        }
        a = base.modPow(prime.subtract(one),prime);
        System.out.println("a: "+a);    
        if (a != one){
            break;          
        }   
    }

Ответ 1

Вы можете сравнить их с помощью BigInteger.compareTo(BigInteger).

В вашем случае это будет while (base.compareTo(prime) > 0) {...}.

Кроме того, ваше условие завершения должно быть изменено с if (a != one) на if (!a.equals(one)), так как две переменные BigInteger с одинаковым значением целого не обязательно ссылаются на один и тот же объект (это все, что == и != test).

Ответ 2

Так как BigInteger являются объектами, следует соблюдать осторожность при использовании операторов равенства. Прямо сейчас вы выполняете сравнительное сравнение (которое в этом случае скорее всего потерпит неудачу). Вам нужно будет использовать методы equals() или compareTo().

BigInteger имеет встроенную статическую переменную, представляющую один. Используйте метод equals() или метод compareTo() для сравнения значений:

if (!a.equals(BigInteger.ONE)) {
    ...
}

-или -

if (a.compareTo(BigInteger.ONE) != 0) {
    ...
}

Надеюсь, что это поможет! См. Здесь для получения дополнительной информации: http://download.oracle.com/javase/6/docs/api/java/math/BigInteger.html

Ответ 3

Может

while (base.compareTo(prime)>0){
//rest of your loop
}