Bonjour à tous.
Comme le titre l'indique, j'ai fait un programme dans lequel il y a une erreur mais malheureusement je ne la trouve pas. C'est pour cela que je viens quémander votre aide. Ce n'est pas une erreur à la compilation mais une erreur à l'exécution.
Il y a plusieurs classes dans ce programme mais je ne vous mets que la partie de la classe concernée par l'erreur car je ne pense pas que cette erreur se trouve dans l'une des autres classes (si vous avez besoin du reste de la classe ou des autres classes, faites le moi savoir, je mettrai le reste).
Ce programme permet donc de calculer le niveau de compétence des élèves d'une classe de primaire. L'utilisateur entre le nom des éléves et des compétences ainsi que leurs niveaux de compétences dans chaque compétence (pour info, l'utilisateur tape soit A, NA, ECA ou ABS pour absent).
Suite à ces saisies, trois tableaux s'affichent : le 1er récapitulant le tout, le second calculant le pourcentage de A, ECA, NA par matière et le dernier calculant le nombre de A, ECA, NA par élève.
Le problème est présent sur ce dernier tableau. En effet, tout va bien tant que l'utilisateur ne saisit pas ABS. Mais quand l'utilisateur saisit ABS, le calcul ne se fait plus correctement et il n'y a plus que des "0" dans les cases pour les derniers élèves.
Voici la partie du programme concernant la saisie par l'utilisateur :
Et voici la partie concernant l'affichage du tableau :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99 public void saisieNotes() { String ch; int resultat; tabNotes = new String[nbCompetences][nbEleves]; tabPourcentages = new int[nbCompetences][3]; tabNb = new int[3][nbEleves]; nbElevesBis = nbEleves; System.out.println(); for (int i=0; i<nbCompetences; i++) { System.out.println(); System.out.println("Pour la compétence '" + tabCompetences[i] + "' : "); System.out.println(); compteur_A = 0; compteur_ECA = 0; compteur_NA = 0; nbEleves = nbElevesBis; for (int j=0; j<nbElevesBis; j++) { fin = false; while (fin==false) { try { System.out.print(" Entrez le niveau d'acquisition de " + tabEleves[j] + " : "); Scanner sc = new Scanner(System.in); ch = sc.nextLine(); tabNotes[i][j] = ch.toUpperCase(); if (tabNotes[i][j].equals("A") || tabNotes[i][j].equals("ECA") || tabNotes[i][j].equals("NA") || tabNotes[i][j].equals("ABS")) { fin = true; } else { throw new ErreurSaisie(); } } catch (ErreurSaisie e) { JOptionPane.showMessageDialog(null, "Veuillez saisir A, ECA, NA ou ABS.", "ERREUR DE SAISIE", JOptionPane.ERROR_MESSAGE); } } if (tabNotes[i][j].equals("A")) { compteur_A = compteur_A + 1; } else if (tabNotes[i][j].equals("ECA")) { compteur_ECA = compteur_ECA + 1; } else if (tabNotes[i][j].equals("NA")) { compteur_NA = compteur_NA + 1; } else { nbEleves = nbEleves - 1; } } for (int k=0; k<3; k++) { if (k==0) { resultat = (compteur_A * 100) / nbEleves; tabPourcentages[i][k] = resultat; } if (k==1) { resultat = (compteur_ECA * 100) / nbEleves; tabPourcentages[i][k] = resultat; } if (k==2) { resultat = (compteur_NA * 100) / nbEleves; tabPourcentages[i][k] = resultat; } } } for (int i=0; i<nbEleves; i++) { compteur_A = 0; compteur_ECA = 0; compteur_NA = 0; for (int j=0; j<nbCompetences; j++) { if (tabNotes[j][i].equals("A")) { compteur_A = compteur_A + 1; } if (tabNotes[j][i].equals("ECA")) { compteur_ECA = compteur_ECA + 1; } if (tabNotes[j][i].equals("NA")) { compteur_NA = compteur_NA + 1; } } for (int k=0; k<3; k++) { if (k==0) { tabNb[k][i] = compteur_A; } if (k==1) { tabNb[k][i] = compteur_ECA; } if (k==2) { tabNb[k][i] = compteur_NA; } } } }
Vous trouverez également en pièce jointe, un exemple en image. L'erreur se trouve dans le tableau du bas (dernière colonne).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50 public void afficher_nb() { JTextField[][]tab2 = new JTextField[3][nbEleves]; JPanel jpane2; JFrame fenetre2; fenetre2 = new JFrame(); fenetre2.setLocation(0,(hauteur-230)); fenetre2.setTitle("Tableau Eleve"); fenetre2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); fenetre2.setSize(new Dimension((largeur-5),(hauteur-630))); jpane2 = new JPanel(); JScrollPane monScrollPane2 = new JScrollPane(); monScrollPane2.setViewportView(jpane2); fenetre2.setContentPane(monScrollPane2); jpane2.setLayout(new GridLayout(4,nbEleves+1)); for (int i=0; i<3; i++) { for (int j=0; j<nbEleves; j++) { tab2[i][j] = new JTextField(); tab2[i][j].setHorizontalAlignment(JTextField.CENTER); tab2[i][j].setEditable(false); tab2[i][j].setFont(new Font("sansserif", Font.BOLD, 14)); } } jpane2.add(new Label(" ")); String[]tabNiveau = new String[3]; tabNiveau[0] = "Nombre de A"; tabNiveau[1] = "Nombre de ECA"; tabNiveau[2] = "Nombre de NA"; for (int i=0; i<nbEleves; i++) { jpane2.add(new MyJLabel("" + tabEleves[i], JLabel.CENTER)); } for (int i=0; i<3; i++) { jpane2.add(new MyJLabel("" + tabNiveau[i], JLabel.CENTER)); for (int j=0; j<nbEleves; j++) { jpane2.add(tab2[i][j]); } } for (int i=0; i<3; i++) { for (int j=0; j<nbEleves; j++) { tab2[i][j].setText("" + tabNb[i][j]); } } fenetre2.setVisible(true); }
Si quelqu'un avait le temps d'y jeter un coup d'oeil et de m'apporter la réponse ou au moins de me mettre sur la piste, je lui en serais très reconnaissant.
Merci d'avance.
Partager