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