2017-09-21 6 views
0

次のコード行を実行したときに、ひどいjavacがゼロで余分な行を印刷している理由を知ってもらえますか?私は意図的に最初の行に可能な行の数を出力しました。これは正確には非ゼロ行の数に等しいです。何かアドバイス? コード:Javaコンパイルで無関係な内容

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(); 
    } 

出力:(

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

を、最初にあなたはそれが100行を持って次のように述べています

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 
+1

達成しようとしていることは何ですか? – Mritunjay

+1

あなたの問題とは無関係です。あなたは変数命名に取り組むべきです、私は逆コンパイルされたコードを読んでいるように感じます。 –

+0

@Mritunjay:15の合計3つの「fa」の部分集合を選び、それらの部分集合を「sa」に集めています。 –

答えて

2

はあなたがsaに反復されている印刷するにはのデフォルト値は0です)。

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

それは独立して、あなたがfaとあなたの二forに何をしたかのそれらの100行を示しています。

はして試してみてください。

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

@Mritunjayありがとうございます。完了しました。私はそれが十分であることを願って:) –

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) { 
    ... 
} 
関連する問題