Изменение функции от возврата long в BigInteger - PullRequest
0 голосов
/ 10 сентября 2018

Я работаю над программой, которая находит числа Фибоначчи. Первая версия домашнего задания требовала возврата длинного типа данных, и теперь мы должны изменить нашу функцию, чтобы она возвращала BigInteger. Я не уверен, как изменить мою функцию, чтобы отправить обратно тип BigInteger. Вот что у меня есть:

public static BigInteger fibonacci_Loop(int f) {
    BigInteger previous, current;

    for(int i = 0; i < f; i ++) {
        BigInteger sum = previous.add(current);
        previous = current;
        current = sum;
    }
    return previous;
}

Он не запустится, потому что хочет, чтобы я инициализировал предыдущий и текущий, и каждый раз, когда я это делаю, он не возвращает правильные числа. Я не совсем уверен, как использовать BigInteger, и любые советы будут с благодарностью.

Ответы [ 4 ]

0 голосов
/ 10 сентября 2018

Правило : Прежде всего вам необходимо инициализировать любую переменную, объявленную внутри функции, перед выполнением какой-либо операции с ней.

изменить нашу функцию, чтобы вернуть BigInteger

Если вам нужно только вернуть BigInteger, тогда следует изменить только оператор return вашей предыдущей функции с long на

return new BigInteger(previous);

0 голосов
/ 10 сентября 2018

Когда вы работаете с long, они являются примитивным или коробочным типом, поэтому при объявлении они по умолчанию равны 0.

java.math.BigInteger, однако, является объектом, поэтому вы должны инициализировать его перед тем, какиспользуйте его.

Изменение этой строки BigInteger previous, current; на BigInteger previous = new BigInteger("0"), current = new BigInteger("1"); должно исправить это.

0 голосов
/ 10 сентября 2018

Вы можете использовать конструктор, который принимает строку:

BigInteger i = new BigInteger(“0”);

Но есть константы, которые вы можете использовать:

BigInteger previous = BigInteger.ZERO;
BigInteger current= BigInteger.ONE;
0 голосов
/ 10 сентября 2018

Ниже код работает для меня. Инициализируйте предыдущий ноль, а текущий - 1 и аналогичным образом запустите цикл. Обратите внимание, что цикл запускается на единицу меньше, чем требуемый индекс Фибоначчи.

public static BigInteger fibonacci_Loop(int f) {
BigInteger previous = BigInteger.ZERO;
BigInteger current = BigInteger.ONE;

for(int i = 0; i < f-1; i ++) {
    BigInteger sum = previous.add(current);
    previous = current;
    current = sum;
}
return previous;

}

...