У мене є цей фрагмент коду, який не працює:
BigInteger sum = BigInteger.valueOf(0);
for(int i = 2; i < 5000; i++) {
if (isPrim(i)) {
sum.add(BigInteger.valueOf(i));
}
}
Змінна суми завжди 0. Що я роблю неправильно?
У мене є цей фрагмент коду, який не працює:
BigInteger sum = BigInteger.valueOf(0);
for(int i = 2; i < 5000; i++) {
if (isPrim(i)) {
sum.add(BigInteger.valueOf(i));
}
}
Змінна суми завжди 0. Що я роблю неправильно?
Відповіді:
BigInteger
незмінна. Javadocs зазначає, що додає () "[r] записує BigInteger, значення якого (це + val)." Отже, ви не можете змінити sum
, вам потрібно переназначити результат add
методу на sum
змінну.
sum = sum.add(BigInteger.valueOf(i));
BigInteger - клас незмінний. Тому щоразу, коли ви робите будь-яку арифметику, вам доведеться перепризначити вихідну змінну.
Так, це незмінне
sum.add(BigInteger.valueOf(i));
тому метод add () класу BigInteger не додає нового значення BigIntger до власного значення, а створює та повертає нову посилання BigInteger, не змінюючи поточний BigInteger, і це робиться навіть у випадку Strings
Насправді ви можете використовувати,
BigInteger sum= new BigInteger("12345");
для створення об’єкта для класу BigInteger. Але тут проблема полягає в тому, що ви не можете дати змінну в подвійних лапках. Отже, ми повинні використовувати метод valueOf (), і нам доведеться знову зберігати відповідь у цій сумі. Тому ми напишемо,
sum= sum.add(BigInteger.valueOf(i));
Biginteger
є незмінним класом. Вам потрібно чітко призначити значення результату, щоб підсумувати його так:
sum = sum.add(BigInteger.valueof(i));
Оскільки ви підсумовуєте деякі значення int разом, не потрібно використовувати BigInteger. long
для цього достатньо. int
становить 32 біти, тоді long
як 64 біт, який може містити суму всіх значень int.
int
, тому вам не потрібноBigInteger
в цьому прикладі.