Java 为什么我的Biginteger.multiply()显示NullPointerException?

Java 为什么我的Biginteger.multiply()显示NullPointerException?,java,biginteger,Java,Biginteger,我尝试将从1到1000的阶乘初始化为biginteger数组,并计算数字之和。为什么这段代码显示java.lang.NullPointerException?我认为所有的初始化都是正确的 class Main { public static void main(String[] args) { BigInteger[] b = new BigInteger[1010]; int[] ara = new int[1010]; BigInteger c; b[0

我尝试将从1到1000的阶乘初始化为biginteger数组,并计算数字之和。为什么这段代码显示java.lang.NullPointerException?我认为所有的初始化都是正确的

class Main {

public static void main(String[] args) {

    BigInteger[] b = new BigInteger[1010];
    int[] ara = new int[1010];
    BigInteger c;

    b[0] = BigInteger.ONE;
    b[1] = BigInteger.ONE;

    ara[0] = ara[1] = 1;
    String s;
    int l, sum;

    for (int i = 2; i <= 1001; i++) {
        c = b[i - 1];
        b[i] = b[i].multiply(c);
        s = b[i].toString();
        l = s.length();
        sum = 0;

        for (int j = 0; j < l; j++) {
            sum += Character.getNumericValue(s.charAt(j));
        }
        ara[i] = sum;
    }
主类{
公共静态void main(字符串[]args){
BigInteger[]b=新的BigInteger[1010];
int[]ara=新int[1010];
大整数c;
b[0]=BigInteger.1;
b[1]=BigInteger.1;
ara[0]=ara[1]=1;
字符串s;
int l,总和;

对于(inti=2;i问题:

    b[i] = b[i].multiply(c);
然后查看您初始化的
b
数组

 b[0] = BigInteger.ONE;
 b[1] = BigInteger.ONE;
现在看看for循环

 for (int i = 2; i <= 1001; i++) {
        c = b[i - 1];
        b[i] = b[i].multiply(c);

factorial的算法是取一些值
n
,然后用
n
乘以
n-1
,直到得到值
1
。你的算法似乎没有这样做(它生成了一个值)。我想你想要的是

int len = 1010;
BigInteger[] b = new BigInteger[len];
int[] ara = new int[len];
for (int i = 0; i < len; i++) {
    // calculate factorial.
    b[i] = BigInteger.valueOf(i + 1);
    for (int j = i; j > 1; j--) {
        b[i] = b[i].multiply(BigInteger.valueOf(j));
    }
    // now sum digits.
    for (char ch : b[i].toString().toCharArray()) {
        ara[i] += Character.getNumericValue(ch);
    }
}
int len=1010;
BigInteger[]b=新的BigInteger[len];
int[]ara=新的int[len];
对于(int i=0;i1;j--){
b[i]=b[i].乘法(BigInteger.valueOf(j));
}
//现在求和。
for(char ch:b[i].toString().toCharArray()){
ara[i]+=Character.getNumericValue(ch);
}
}

有我的问题。谢谢:)
int len = 1010;
BigInteger[] b = new BigInteger[len];
int[] ara = new int[len];
for (int i = 0; i < len; i++) {
    // calculate factorial.
    b[i] = BigInteger.valueOf(i + 1);
    for (int j = i; j > 1; j--) {
        b[i] = b[i].multiply(BigInteger.valueOf(j));
    }
    // now sum digits.
    for (char ch : b[i].toString().toCharArray()) {
        ara[i] += Character.getNumericValue(ch);
    }
}