проблема вычисления Biginteger - PullRequest
0 голосов
/ 06 мая 2010

Я использую следующий код, но параметры не передаются методам.

BigInteger p = BigInteger.valueOf(0);
BigInteger u1 = obj.bigi_calc(g1, l);

В этом g1 l - длинные значения.

Метод

private BigInteger bigi_calc(long g1, long l){           

        BigInteger cal = BigInteger.valueOf(g1);
        BigInteger cal1= BigInteger.valueOf(l);
        for(BigInteger f = BigInteger.ONE;f.compareTo(cal1)>0;f=f.add(BigInteger.ONE)){
            //BigInteger p= BigInteger.valueOf(0);
            p = cal.multiply(cal1);
            System.out.println("check p"+p);
        }
    //  System.out.println("check p"+p);
        return p;
    }

elipse показывает, что он может быть не синхронизирован, но параметры не передаются в функции. Можете ли вы помочь мне решить эту проблему?

1 Ответ

1 голос
/ 06 мая 2010

Вы объявили BigInteger p = BigInteger.valueOf(0); как локальную переменную вне bigi_calc? Потому что в этом случае область действия p не распространяется на метод bigi_calc.

Вы можете либо:

  • Передача p в качестве третьего аргумента
  • Сделать это полем для члена

Чтобы сделать первый вариант, вы должны сделать что-то вроде этого:

private BigInteger bigi_calc(long g1, long l, BigInteger p) { ... }

//...
BigInteger p = BigInteger.valueOf(0);
BigInteger u1 = obj.bigi_calc(g1, l, p);

Изучение кода дополнительно показывает, что он не имеет никакого смысла. Есть BigInteger.pow, если это то, что вы пытаетесь вычислить. И использование BigInteger для счетчика цикла, когда оно не превысит long, является просто ненужным беспорядком.

Если pow(long base, long exp) - то, что вы хотите, и по какой-то причине вам не разрешено использовать BigInteger.pow, то вы можете написать это так:

static BigInteger pow(long base, long exp){              
    BigInteger result = BigInteger.ONE;
    BigInteger biBase = BigInteger.valueOf(base);
    for (long i = 0; i < exp; i++) {
        result = result.multiply(biBase);
    }
    return result;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...