Salut,
Tout d'abord, le problème que tu as dans la ligne :
System.out.print(t[line][column]+" ")
et qui te dit que "column" peut ne pas avoir été initialisée (The local variable column may not have been initialized) vient du fait que column n'a pas de valeur dès le début, et qu'il se peut qu'on exécute jamais for (column=0;column<t[line].length;column++){ (c'est le seul code qui peut lui donner une valeur), parce qu'il est dans une boucle qui peut ne faire aucune itération. On ne peut pas utiliser une variable qui n'a pas de valeur.
Mais ton problème n'est pas vraiment là, puisque ce n'est pas column que tu devrais utiliser. Tu cherches juste à parcourir ton tableau pour l'afficher : il ne faut pas utiliser line et column pour ça, mais les i et j de tes boucles de parcourt, qui sert bien à ça (ou alors tu fais for(line=0;... et for(column=0..., comme dans les premières boucles) :
1 2 3 4 5 6
| for (int i = 0; i < exposant; i++) {
for (int j = 0; j < t[i].length; j++) {
System.out.print(t[i][j] + " ");
}
System.out.println();
} |
A noter que tu avais également mal placée le System.out.println();. Tu passais à la ligne dans l'affichage à chaque colonne (boucle sur j), alors qu'il fallait passer à la ligne à chaque ligne (boucle sur i).
Tu pourrais également faire l'affichage dans la première boucle. Mais ce n'est pas plus mal d'avoir le traitement et l'affichage séparés.
Sinon, je n'ai pas vraiment de code à moi à te proposer. Il serait très ressemblant au tien :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| public static void trianglePascal(int exposant) {
int t[][] = new int[exposant][];
for (int i = 0; i < exposant; i++) {
t[i] = new int[i + 1];
for (int j = 0; j < t[i].length; j++) {
if (j == 0 || i == j)
t[i][j] = 1;
else
t[i][j] = t[i - 1][j - 1] + t[i - 1][j];
}
}
for(int[] line : t) {
for(int j = 0; j<line.length; j++ ) {
if (j!=0) {
System.out.print(' ');
}
System.out.print(line[j]);
}
System.out.println();
}
} |
Juste ne pas recycler les variables. Et le petit (j!=0) pour ne pas afficher d'espace en fin de ligne, mais c'est un détail. Eventuellement, on pourrait faire un vrai affichage triangulaire, mais ça complexifie un peu le programme. Voici pour la boucle d'affichage :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| int maxligne=calculTaille(t[t.length-1]);
for(int[] line : t) {
int tailleligne = calculTaille(line);
for(int j=0; j<(maxligne-tailleligne)/2; j++) {
System.out.print(' ');
}
for(int j = 0; j<line.length; j++ ) {
if (j!=0) {
System.out.print(' ');
}
System.out.print(line[j]);
}
System.out.println();
}
} |
avec
1 2 3 4 5 6 7 8 9 10
| public static int calculTaille(int[] line) {
int tailleligne = 0;
for(int j = 0; j<line.length; j++ ) {
if (j!=0) {
tailleligne++;
}
tailleligne += Math.log10(line[j])+1;
}
return tailleligne;
} |
Partager