2017-09-21 20 views
0

Quelqu'un peut-il être si gentil de me faire savoir pourquoi le heck javac imprime des lignes supplémentaires avec des zéros lorsqu'il est exécuté les lignes de code suivantes? J'ai intentionnellement imprimé le nombre de lignes possibles dans la première ligne, qui est exactement égal au nombre de lignes non nulles. Aucun conseil? code:Contenu non pertinent dans la compilation 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(); 
    } 

La sortie:

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

Et qu'essayez-vous de réaliser? – Mritunjay

+1

Sans rapport avec votre problème; vous devriez travailler sur votre nom de variable, c'est comme si je lisais du code décompilé. –

+0

@Mritunjay: il s'agit de choisir les sous-ensembles de 3 nombres de 'fa' qui totalisent 15, et de collecter ces sous-ensembles dans' sa'. –

Répondre

2

Pour vous imprimer itérez sur sa:

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

Et au début vous avez dit qu'il a 100 lignes (valeurs par défaut à 0):

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

Il montre les 100 lignes indépendamment de ce que vous avez fait sur votre deuxième for avec fa.

Essayez avec:

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 merci. Terminé. J'espère que c'est suffisant :) –

0

Vous imprimez le contenu de l'ensemble sa quel que soit le nombre d'articles que vous avez ajoutés. Les 12 premiers éléments s'impriment correctement, tandis que les éléments restants impriment les valeurs initiales des tableaux int[3], qui se trouvent être des zéros.

Vous pouvez résoudre ce problème en itérer jusqu'à a articles, comme ceci:

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

Sinon, vous pouvez passer à l'aide de listes en place de tableaux. Puisque les listes se développent dynamiquement, vous pouvez éviter complètement ce problème:

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) { 
    ... 
}