java编译中不相关的内容

时间:2017-09-21 12:28:08

标签: java javac

有人能够如此友好地告诉我为什么在执行以下代码行时,heck javac会用零打印额外的行?我故意在第一行打印了可能的行数,这与非零行的数量完全相同。有什么建议? 代码:

int[] fa = new int[15];
    int[][] sa = new int[100][3];
    int a=0, b=0;

    for(int i=0; i<15; i++){
        fa[i] = i+1;
    }


    for(int i=0; i<fa.length; i++){
        for(int j=i+1; j<fa.length; j++){
            for(int k=j+1; k<fa.length; k++){
                if(fa[i]+fa[j]+fa[k]==15){
                    sa[a][0] = fa[i];
                    sa[a][1] = fa[j];
                    sa[a][2] = fa[k];
                    a++;
                }
            }
        }
    }
    System.out.println(a);
    for(int i=0; i<sa.length; i++){
        for(int j=0; j<3; j++){
            System.out.print(sa[i][j]+" ");
        }
        System.out.println();
    }

输出:

12
1 2 12 
1 3 11 
1 4 10 
1 5 9 
1 6 8 
2 3 10 
2 4 9 
2 5 8 
2 6 7 
3 4 8 
3 5 7 
4 5 6 
0 0 0 
0 0 0 
0 0 0 
0 0 0 
0 0 0 
0 0 0 
0 0 0 
0 0 0 
0 0 0 
0 0 0 
0 0 0 
0 0 0 
0 0 0 
0 0 0 
0 0 0 
0 0 0 
0 0 0 
0 0 0 
0 0 0 
0 0 0 
0 0 0 
0 0 0

2 个答案:

答案 0 :(得分:3)

要打印,您正在sa上进行迭代:

for(int i=0; i<sa.length; i++){

一开始你说它有100行(默认值为0 ):

int[][] sa = new int[100][3];

它会显示这100行,而与您使用for的第二个fa所做的行无关。

尝试:

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

答案 1 :(得分:0)

您正在打印整个sa的内容,无论您添加了多少项。前12个项目打印正确,而其余项目打印int[3]数组的初始值,恰好是零。

您可以通过迭代a项来解决此问题,例如:

for(int i=0; i < a; i++) {
//              ^^^ 
    for(int j=0; j<3; j++){
        System.out.print(sa[i][j]+" ");
    }
    System.out.println();
}

或者,您可以切换到使用列表代替数组。由于列表会动态增长,因此您可以完全避免此问题:

class Triple {
    private final a, b, c;
    public Triple(int a, int b, int c) {this.a=a; this.b=b; this.c=c;}
    public int getA() { return a; }
    public int getB() { return b; }
    public int getC() { return c; }
}

List<Triple> sa = new ArrayList<>();
...
if(fa[i]+fa[j]+fa[k]==15){
    sa.add(new Triple(fa[i], fa[j], fa[k]));
}
...
for (Triple t : sa) {
    ...
}