有人能够如此友好地告诉我为什么在执行以下代码行时,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
答案 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) {
...
}