Java:我无法将一个BigInteger添加到另一个BigInteger

时间:2017-06-11 07:45:43

标签: 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();
        }
    }
}

1 个答案:

答案 0 :(得分:3)

BigInteger是不可变的,因此在add()实例上调用BigInteger并不会更改其值,它会返回一个新的BigInteger实例。

由于您忽略了返回的值,因此sum_negsum_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++;
            }