Для класса Java BigInteger, есть ли способ определить оператор if с несколькими условиями, разделенными логическими операторами? - PullRequest
0 голосов
/ 04 июня 2019

Вот метод в Java, который будет создавать ArrayList, содержащий первые 100 000 000-ые числа Фибоначчи, так что ни одно из этих чисел Фибоначчи не делится на любое меньшее квадратное число.

В результате класс Java BigInteger внедряется для обработки чисел исключительно большого порядка.

Было обнаружено, что использование логических операторов, таких как && и || , не работает с классом BigInteger при написании оператора if, как показано в приведенном ниже коде .

Комментарии были удалены из кода для удобства чтения на этой странице.

Ваш вклад очень ценится.

public ArrayList<BigInteger> squareFree () {
    index = 0;
    fibValues_noSqr = fibValues;
    ArrayList<BigInteger> squares = new ArrayList<BigInteger>();

    int sqrScan;

    for (index = 0; index < fibValues_noSqr.size(); index++) {
        squares.add(BigInteger.valueOf(powerOf(index + 2, 2)));
    }

    for (index = 0; index < fibValues_noSqr.size(); index++) {
        for (sqrScan = 0; sqrScan < fibValues_noSqr.size(); sqrScan++) {
            if (squares.get(index).compareTo(fibValues_noSqr.get(sqrScan)) < 0 || squares.get(index).equals(fibValues_noSqr.get(sqrScan)) && fibValues_noSqr.get(sqrScan).remainder(squares.get(index))) {

                fibValues_noSqr.remove(sqrScan);
            }
        }
    }
}

Следующая ошибка обнаружена Java в этом сценарии

Оператор && не определен для типа (ов) аргументов, логическое значение, BigInteger

1 Ответ

1 голос
/ 04 июня 2019

Спасибо @GBlogett и @Compass за ваши ответы.

Вот рабочий код

public ArrayList<BigInteger> squareFree () {
    index = 0;
    fibValues_noSqr = fibValues;
    ArrayList<BigInteger> squares = new ArrayList<BigInteger>();

    int sqrScan;

    for (index = 0; index < fibValues_noSqr.size(); index++) {
        squares.add(BigInteger.valueOf(powerOf(index + 2, 2)));
    }

    for (index = 0; index < fibValues_noSqr.size(); index++) {
        for (sqrScan = 0; sqrScan < fibValues_noSqr.size(); sqrScan++) {
            if (squares.get(index).compareTo(fibValues_noSqr.get(sqrScan)) < 0
             && fibValues_noSqr.get(sqrScan).mod(squares.get(index)) == new BigInteger("0")) {

                fibValues_noSqr.remove(sqrScan);
            }
    }

Обновлен оператор if

for (index = 0; index < fibValues_noSqr.size(); index++) {
    for (sqrScan = 0; sqrScan < fibValues_noSqr.size(); sqrScan++) {
        if (squares.get(index).compareTo(fibValues_noSqr.get(sqrScan)) < 0
         && fibValues_noSqr.get(sqrScan).mod(squares.get(index)).equals(BigInteger.ZERO)) {

            fibValues_noSqr.remove(sqrScan);
}
...