IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

avec Java Discussion :

Il y a une erreur dans mon programme, mais où ?


Sujet :

avec Java

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 40
    Points : 41
    Points
    41
    Par défaut Il y a une erreur dans mon programme, mais où ?
    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 :
    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;
    				}				
    			}
    		}
    	}
    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
    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);
    	}
    Vous trouverez également en pièce jointe, un exemple en image. L'erreur se trouve dans le tableau du bas (dernière colonne).

    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.
    Images attachées Images attachées  

  2. #2
    Membre averti

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2010
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2010
    Messages : 246
    Points : 402
    Points
    402
    Par défaut
    si tu veux un technique simple pour résoudre ce genre de problème la voici.Tu as en fait 3 solutions :

    - Tu es très fort et tu vois l'erreur directement
    - Tu utilise le mode Debug de ton IDE préferé et tu vérifie les valeur de tes variables aux instants clés
    - Tu met plein de System.out.println dans ton code histoire de voir par ou tu passe et de visualiser ce qui se passe réellement.

    Et si tu souhaite que quelqun test ton code, fournit en au moins une version complète et exécutable en l'état.
    C'est en aidant les autres qu'on en apprend beaucoup soi-même

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 17
    Points : 31
    Points
    31
    Par défaut
    Bonjour,

    Je pense que ton erreur provient du fait que tu utilise nbEleves dans ta deuxième boucle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for (int i=0; i<nbEleves; i++) {
    alors que celui-ci est modifié lorsque l'utilisateur rentre ABS. S'il s'agit du dernier élève, les compteurs ne sont pas mis à jour. Tu dois ré-initialiser la valeur ou tester par rapport à nbEleveBis.

  4. #4
    Membre du Club
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 40
    Points : 41
    Points
    41
    Par défaut
    Oui en effet, ça venait de nbEleves.

    Merci beaucoup babycart.

    Au plaisir...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Explication d une erreur dans mon programme sas
    Par bailliblaire dans le forum SAS Base
    Réponses: 1
    Dernier message: 18/01/2012, 17h16
  2. [Help] Erreurs dans mon programme
    Par Tacha dans le forum Langage
    Réponses: 13
    Dernier message: 02/10/2006, 13h57
  3. Integrer une musique dans mon programme
    Par Tutux84 dans le forum C
    Réponses: 2
    Dernier message: 29/01/2005, 12h41
  4. [Lien]erreur dans mon programme python
    Par durnambule dans le forum Général Python
    Réponses: 11
    Dernier message: 29/01/2004, 14h59
  5. [] Utiliser AVI d'une DLL dans mon programme
    Par seb.49 dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 02/05/2003, 14h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo