Mon programme java n’exécute pas bien

Fermé
sandaff Messages postés 1 Date d'inscription mardi 21 avril 2015 Statut Membre Dernière intervention 8 septembre 2022 - Modifié le 9 sept. 2022 à 10:03
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 - 9 sept. 2022 à 10:19

Bonsoir tout le monde;

Aidez moi à corriger l'exécution de mon programme;

  1. le curseur ne viens pas vers le bas
  2. le boucle while ne se passe pas comme écrit
  3. la fonction saisiEtudiant a une erreur sur sa valeur de retour sans commentaire voici le code erreur:

Vous verrez que dans l'entree de while dans saisieEtudiant() les deux messages sont affichés simultanément alors que ça devrait se faire un a un et ensuit à chaque sortie de while au lieu de rester dans menu principal ça nous fait rentree dans saisieEtudiant tout en affichant le message "veuillez saisir le nombre d’étudiant" qui est anormal;

----- Menu principal ------------
1. Liste d’étudiants
2.Liste d’étudiants incompatibles
3. Sélection d’étudiants
4.Rechercher 
5.Quitter

Taper votre choix : 1
------- Menu principal ---------
1. Liste d’étudiants
2.Liste d’étudiants incompatibles 
3. Sélection d’étudiants
4.Rechercher
5.Quitter

Taper votre choix :
Veuillez saisir le nombre d’étudiants : 2
Veuillez saisir l’Id de l’étudiants :
Veuillez saisir le nom de l’étudiants : 001
Veuillez saisir le prénom de l’étudiants : bab
Veuillez saisir l’adresse de l’étudiants : djk
Veuillez saisir l’Id de l’étudiants : 002
Veuillez saisir le nom de l’étudiants : daffe
Veuillez saisir le prénom de l’étudiants : aye
Veuillez saisir l’adresse de l’étudiants : bdbd nd d
------- Menu principal ---------
1. Liste d’étudiants
2.Liste d’étudiants incompatibles
3. Sélection d’étudiants
4.Rechercher 
5.Quitter

Taper votre choix :
Veuillez saisir le nombre d’étudiants :

voici le code en entier:

package PegaleNP;

import java.util.*;
import java.lang.String;

public class PegaleNP {
    public static void main(String[] args) { // TODO Auto-generated method stub
        // PegaleNP d1 = new Dortoir ();
        @SuppressWarnings("resource")
        Scanner keby = new Scanner(System.in);
        System.out.println("----- Menu principal ------------");
        System.out.println(" 1. Liste d’étudiants ");
        System.out.println(" 2.Liste d’étudiants incompatibles ");
        System.out.println(" 3. Sélection d’étudiants ");
        System.out.println(" 4.Rechercher ");
        System.out.println(" 5.Quitter ");
        System.out.println(" Taper votre choix : ");
        //int sc=keby.nextInt();
        int choix = keby.nextInt();
        // int choix=0;
        do {
            System.out.println("------- Menu principal ---------");
            System.out.println(" 1. Liste d’étudiants ");
            System.out.println(" 2.Liste d’étudiants incompatibles ");
            System.out.println(" 3. Sélection d’étudiants ");
            System.out.println(" 4.Rechercher ");
            System.out.println(" 5.Quitter ");
            System.out.println(" Taper votre choix : ");
            // int choix=Integer.parseInt(sc.nextLine()) ;
            switch (choix) {
                case 1:
                    SaisieEtudiant(keby);
                    break;
                /*
                case 2:
                    SaisieIncompatibilite() break;
                case 3:
                    Selection(Tab - Etud, Tab - Etud - Inc) break;
                case 4:
                    Recherche(Tab - Etud - Inc, Id1, Indice) break;
                */
                default:
                    System.out.println("Veuillez respecter le menu!");
            }
        } while (choix != 5);
    }

    public static String[][] SaisieEtudiant(Scanner keby) {
        System.out.println("Veuillez saisir le nombre d’étudiants :");
        int n = keby.nextInt();
        String[][] TabEtud = new String[n][4];
        int i = 0;
        String IdEtud;
        String Nom;
        String Prenom;
        String Adresse;
        while (i < n) {
            System.out.println("Veuillez saisir l’Id de l’étudiants :");
            IdEtud = keby.nextLine();
            TabEtud[i][0] = IdEtud;
            System.out.println("Veuillez saisir le nom de l’étudiants :");
            Nom = keby.nextLine();
            TabEtud[i][1] = Nom;
            System.out.println("Veuillez saisir le prénom de l’étudiants :");
            Prenom = keby.nextLine();
            TabEtud[i][2] = Prenom;
            System.out.println("Veuillez saisir l’adresse de l’étudiants :");
            Adresse = keby.nextLine();
            TabEtud[i][3] = Adresse;
            i = i + 1;
        }
        return TabEtud;
    }
}
A voir également:

1 réponse

KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
9 sept. 2022 à 10:19

Bonjour,

J'ai réédité ta question parce que c'était totalement illisible, il n'y avait aucun saut de ligne ni dans ton message, ni dans ton code !!!

Sinon, c'est un problème qui revient régulièrement sur le forum, c'est lié à l'alternance de nextInt et nextLine

Quand tu saisis un nombre sur ton clavier tu écris un nombre ET un saut de ligne pour valider, mais nextInt ne lit qu'un nombre, le saut de ligne reste en attente d'être lu. Le nextLine suivant va venir lire le saut de ligne qui était en attente sans te de demander d'écrire une nouvelle ligne. C'est pour ça que tu retrouves avec une ligne vide après avoir saisi un int comme dans ton exemple :

Veuillez saisir le nombre d’étudiants : 2
Veuillez saisir l’Id de l’étudiants :

Pour corriger ça, il faudrait tout traiter en nextLine() et faire une conversion de ta ligne en entier :

int choix = Integer.parseInt(keby.nextLine());

0