为什么使用BigInteger的程序不显示任何内容?

时间:2016-05-11 19:07:22

标签: java output pascals-triangle

我的程序显示Pascal的三角形。为了放大可以计算和显示的三角形部分,我使用BigInteger而不是原始类型重写了代码。

以下是代码:

import java.math.BigInteger;

public class ptrig {
public static void main(String args[]) {
    BigInteger no = BigInteger.valueOf(5);

    // Creating the array
    String doubledim[][] = new String[no.intValue()][];
    BigInteger k;
    for (k = BigInteger.ZERO; k.compareTo(no) < 0; k.add(BigInteger.ONE)) {
        doubledim[k.intValue()] = new String[k.intValue() + BigInteger.ONE.intValue()];
    }

    // Assigning values
    BigInteger i, j, p, n;
    BigInteger l = BigInteger.ONE;
    for (i = BigInteger.ZERO; i.compareTo(no) < 0; i.add(BigInteger.ONE)) {
        for (j = BigInteger.ZERO; j.compareTo(i.add(BigInteger.ONE)) < 0; j.add(BigInteger.ONE)) {
            BigInteger m = i.subtract(j);
            if (j.compareTo(m) > 0) {
                for (p = BigInteger.ZERO; p.compareTo(m) < 0; p = p.add(BigInteger.ONE)) {
                    n = i.subtract(p);
                    l = l.multiply(n);
                }
                doubledim[i.intValue()][j.intValue()] = l.divide(factorial.factmet(m)).toString();
                l = BigInteger.ONE;
            }
            if (m.compareTo(j) > 0) {
                for (p = BigInteger.ZERO; p.compareTo(j) < 0; p = p.add(BigInteger.ONE)) {
                    n = i.add(p.add(BigInteger.ONE)).subtract(j);
                    l = l.multiply(n);
                }
                doubledim[i.intValue()][j.intValue()] = l.divide(factorial.factmet(j)).toString();
                l = BigInteger.ONE;
            }
            if (m.compareTo(j) == 0) {
                for (p = BigInteger.ZERO; p.compareTo(j) < 0; p = p.add(BigInteger.ONE)) {
                    n = i.subtract(p);
                    l = l.multiply(n);
                }
                doubledim[i.intValue()][j.intValue()] = l.divide(factorial.factmet(j)).toString();
                l = BigInteger.ONE;
            }
        }
    }

    // Printing
    for (i = BigInteger.ZERO; i.compareTo(no) < 0; i.add(BigInteger.ONE)) {
        for (j = BigInteger.ZERO; j.compareTo(i.add(BigInteger.ONE)) < 0; j.add(BigInteger.ONE)) {
            System.out.print(doubledim[i.intValue()][j.intValue()] + " ");
        }
        System.out.println();
    }
}
}

问题是它什么也没显示。我已经阅读了Stack Overflow我需要将数组值转换为字符串以便显示它们,所以我做了。我还检查了System.out.println声明 - 它们似乎没问题。错误仍然存​​在。

该算法本身在原始类型的先前版本上运行良好。

这里的错误是什么?我尽力在网上找到答案,我无法做到。感谢。

1 个答案:

答案 0 :(得分:1)

你的for循环不会递增它们的索引,并且会永远循环。

i.add(BigInteger.ONE)不会改变icreates a new BigInteger and returns it。如果您想增加i的值,则需要编写i = i.add(BigInteger.ONE)

这意味着当您尝试初始化数组时,您将进入无限循环,您将永远重新初始化doubledim[0]

e.g。

for (k = BigInteger.ZERO; k.compareTo(no) < 0; k.add(BigInteger.ONE)) {
    doubledim[k.intValue()] = new String[k.intValue() + BigInteger.ONE.intValue()];
}

应该是

for (k = BigInteger.ZERO; k.compareTo(no) < 0; k = k.add(BigInteger.ONE)) {
    doubledim[k.intValue()] = new String[k.intValue() + BigInteger.ONE.intValue()];
}

并且您需要同样修复控制数组中数据填充的循环,并在程序中稍后打印它们的数据。