Java BigInteger

Возможное дублирование:
различие с BigInteger

import java.math.BigInteger;  
public class KillerCode{  
    public static void main(String[]args){  
        BigInteger sum=null;  
        for(int i=1;i<=1000;i++){        
            sum=sum+Math.pow(i, i);  
            System.out.println(sum);     
        }    
    }  
} 

Когда я пытаюсь запустить этот код, появляется следующее сообщение об ошибке.

Оператор + не определен для типа (ов) аргумента BigInteger, double.

Как я могу это решить? Спасибо.


person KillerCode    schedule 15.10.2012    source источник
comment
Javadocs вам друг. docs.oracle.com/javase/6/docs/ api / java / math / BigInteger.html   -  person Brian Roach    schedule 15.10.2012
comment
Просто обратите внимание: если это не для учебных целей, нет причин использовать BigInteger в вашем случае.   -  person LanguagesNamedAfterCofee    schedule 15.10.2012


Ответы (4)


Вы не можете использовать типичные математические операторы с BigIntegers, проверьте здесь http://docs.oracle.com/javase/6/docs/api/java/math/BigInteger.html

вам нужно использовать BigInteger.add(your numbers here)

Дальнейшее объяснение,

sum = sum.add(new BigInteger(i).pow(i));
person Austin    schedule 15.10.2012
comment
Вам также необходимо повторно инициализировать сумму для чего-то, она не может быть просто нулевой. - person Ben; 15.10.2012
comment
Вы можете это немного объяснить ??? - person KillerCode; 15.10.2012
comment
@KillerCode Добавил то, что, по моему мнению, должно решить вашу проблему. - person Austin; 15.10.2012
comment
@ Остин Извини, это не работает - person KillerCode; 15.10.2012
comment
@KillerCode Что значит не работает? Тогда нам нужно больше информации. Вы получаете сообщение об ошибке? - person Austin; 15.10.2012
comment
импорт java.math.BigInteger; открытый класс AWords {public static void main (String [] args) {BigInteger sum = null; // BigInteger sum = new BigInteger (null); для (int i = 1; i ‹= 1000; i ++) {sum = sum.add (Math.pow (i, i)); System.out.println (сумма); }}} - person KillerCode; 15.10.2012
comment
Когда я попробовал это, я получил следующее сообщение. Исключение в основном потоке java.lang.Error: Неразрешенная проблема компиляции: метод add (BigInteger) в типе BigInteger не применим для аргументов (double) в AWords.main (AWords.java:8) - person KillerCode; 15.10.2012
comment
@KillerCode Я сейчас не на своем компьютере, поэтому не уверен, но я только что снова отредактировал. Проверьте, работает ли это. Если это не так, проверьте методы в документации BigInteger javadoc. - person Austin; 15.10.2012

Вы не можете этого сделать, потому что sum не целое число, а ссылка на объект.

В отличие от C ++, java не допускает перегрузки операторов, поэтому для выполнения операций необходимо использовать методы класса.

person leo    schedule 15.10.2012

  1. Инициализируйте sum значимым, НЕ null, значением (вы в настоящее время инициализируете null):

    BigInteger sum = BigInteger.ZERO;
    

    иначе выражение

    sum = sum.add(...)
    

    не будет иметь смысла (если вы не хотите NullPointerException).

  2. Используйте статическую фабрику BigInteger.valueOf(long) для сопоставления целочисленного значения с BigInteger.

    Не используйте выражение new BigInteger(i). new BigInteger(i) вызывает конструктор BigInteger(byte[]), с ошибочными результатами (для ваших целей) для значений больше 255 (которые у вас есть ...).

  3. Используйте BigInteger.add(BigInteger) для добавления.

  4. Используйте BigInteger.pow(int) вместо Math.pow(int,int); поскольку вы выполняете (большую) целочисленную арифметику, избегайте всего, что сопоставляет вашу работу с миром с плавающей запятой, например double или float, иначе вы потеряете преимущества BigInteger.

person Richard Sitze    schedule 15.10.2012

BigInteger не имеет определенного оператора +. Согласно его javadocs, найденные здесь, вы можете использовать функцию .add () для достижения желаемого результата.

person Paul Richter    schedule 15.10.2012