为什么Java中的这个2D数组失败了?

时间:2013-11-16 15:09:21

标签: java

我正在尝试用Java编程Pascal-triangle。这是我的代码:

public class Matrix {

  public static void main(String[] args) {
    // TODO Auto-generated method stub
    int Zeilen = 10;
    int Spalten = 10;
    int[][] Matrix = new int[Zeilen][Spalten];

    for(int k=0;k<Zeilen-1;k++) {
        // Gebe jede Zeile aus
        for(int n=0;n<Spalten-1;n++) {
            // Gib jede Spalte aus


            if(n > k) {
                // Für die leeren Felder
                Matrix[k][n] = 0;
            }
            else if(n == k) {
                // Für die Diagonale
                Matrix[k][n] = 1;
            }
            else if(n == 0) {
                // Erste Spalte
                Matrix[k][n] = 1;
            }
            else {
                // Für alle normalen Felder
                System.out.println("TEST");
                Matrix[k+1][n+1] = Matrix[k][n] + Matrix[k][n+1];
            }
        }           
    }

    int i;
    int j;
    for(i=0;i<Zeilen;i++) {
        for(j=0;j<Zeilen;j++) {
            System.out.print(Matrix[i][j]);
        }
        System.out.println("");
    }
}
 }

它适用于唯一的例外,即最后一个else()部分中的计算值未保存到Matrix中。为什么这样,解决方案究竟是什么?我在Java方面不是那么好。谢谢你的帮助。

(顺便说一句:最后的else()部分被执行,公式应该是正确的,所以它关于保存到Matrix中。)

1 个答案:

答案 0 :(得分:1)

根据定义,您可以通过以下公式获得第n行和第k列的系数:

enter image description here

问题出在这里(k和n切换你如何定义嵌套循环和你看到的公式,但没关系):

Matrix[k+1][n+1] = Matrix[k][n] + Matrix[k][n+1];

应该是:

Matrix[k][n] = Matrix[k-1][n-1] + Matrix[k-1][n];

同样要填充你的所有数组,for循环应该是:

for(int k=0;k<Zeilen;k++) {
        // Gebe jede Zeile aus
        for(int n=0;n<Spalten;n++) {

输出:

1 0 0 0 0 0 0 0 0 0 
1 1 0 0 0 0 0 0 0 0 
1 2 1 0 0 0 0 0 0 0 
1 3 3 1 0 0 0 0 0 0 
1 4 6 4 1 0 0 0 0 0 
1 5 10 10 5 1 0 0 0 0 
1 6 15 20 15 6 1 0 0 0 
1 7 21 35 35 21 7 1 0 0 
1 8 28 56 70 56 28 8 1 0 
1 9 36 84 126 126 84 36 9 1 

Demo here.