Как сравнить значения 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;          
        }   
    }

3 ответов


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

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

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


С BigIntegers-объекты, при использовании операторов равенства следует соблюдать осторожность. Прямо сейчас вы выполняете ссылочное сравнение (которое в этом случае, скорее всего, потерпит неудачу). Вам нужно будет использовать 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


может быть

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