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