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