Java: я не могу добавить один BigInteger к другому

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

import java.util.Scanner;
import java.math.BigInteger;

public class NEO01 {

    public static void main(String []args){

        Scanner in = new Scanner(System.in);

        try{
            int t = in.nextInt();

            for(int i=0; i<t; i++){

                int n = in.nextInt();

                long[] a = new long[n];
                long count = 0;

                BigInteger sum_non_neg = new BigInteger("0");
                BigInteger sum_neg = new BigInteger("0");

                BigInteger s;

                for(int j=0; j<n; j++){

                    a[j] = in.nextInt();

                    if(a[j]<0){
                        s = BigInteger.valueOf(a[j]);
                        sum_neg.add(s);
                    }
                    else{
                        s = BigInteger.valueOf(a[j]);
                        sum_non_neg.add(s);
                        count++;
                    }   
                }

                s = BigInteger.valueOf(count);
                sum_non_neg.multiply(s);

                sum_non_neg.add(sum_neg);

                System.out.println(sum_non_neg);
            }
        }
        finally{
            in.close();
        }
    }
}

person Akshay Sharma    schedule 11.06.2017    source источник
comment
Спасибо, сэр, мне очень жаль, что я не уделил внимания исходному вопросу и ответу на него.   -  person Akshay Sharma    schedule 11.06.2017


Ответы (1)


BigInteger является неизменным, поэтому вызов add() в экземпляре BigInteger не изменяет его значение, он возвращает новый BigInteger экземпляр.

Поскольку вы игнорируете возвращаемое значение, ваши sum_neg и sum_non_neg остаются без изменений.

Вы должны присвоить результат сложения своим переменным:

            if(a[j]<0){
                s = BigInteger.valueOf(a[j]);
                sum_neg = sum_neg.add(s);
            }
            else{
                s = BigInteger.valueOf(a[j]);
                sum_non_neg = sum_non_neg.add(s);
                count++;
            }   
person Eran    schedule 11.06.2017