1. #1
    Candidat au Club
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    janvier 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : janvier 2014
    Messages : 5
    Points : 3
    Points
    3

    Par défaut Enregistrer des données dans un arrayList

    Bonsoir à tous,

    Je débute en Java et j'ai un problème que je n'arrive pas à résoudre.
    On me demande d'enregistrer des élèves et leurs classes dans arraylist, cela est-il possible ?
    J'arrive à enregistrer et à afficher, mais à chaque enregistrement le nouveau écrase l'ancien. Or j'aimerais conserver l'ensemble de mes enregistrements.

    Voici mon code, je ne demande pas la solution, mais des pistes afin de mieux comprendre

    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
     
    public static void main(String[] args) {
    		String elv, cls;
    		char reponse =' ';
    		ArrayList<String> tableauDynamique = null;
     
    		do{
     
     
     
    			//Entrer le nom prénom de l'élève
    			Scanner sc =new Scanner(System.in);
    			System.out.println("Introduction de l'élève");
    			elv = sc.nextLine();
    			//Entrer la classe
    			Scanner sc1 =new Scanner(System.in);
    			System.out.println("Introduction de la classe :");
    			cls = sc1.nextLine();
    			ArrayList tableauDynamique1 = new ArrayList(Arrays.asList(elv + cls));
     
    			for (int i=0; i<tableauDynamique1.size(); i++)
    			{
    				String str = (String)tableauDynamique1.get(i);
    				System.out.println(tableauDynamique1.get(i)+"\n");
    			}
     
    				do{
    					System.out.println("Voulez-vous introduire un autre élève ? O/N ");
    					Scanner sc2 =new Scanner(System.in);
    					reponse = sc2.nextLine().charAt(0);
    				}while(reponse !='N' && reponse!='O');
     
     
    		}while(reponse=='O');	
    	}
    Je vous remercie d'avance pour l'attention que vous porterez à ma demande.

    Stu

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    avril 2007
    Messages
    25 292
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : avril 2007
    Messages : 25 292
    Points : 48 381
    Points
    48 381

    Par défaut

    Tu crée un nouvelle list à chaque tour de boucle, que tu stocke dans tableauDynamique1 qui n'existe qu'à l'intérieur d'un tour de boucle. Or le but de l'exercice c'est de stocker les donnée dans tableauDynamique qui se trouve à l'extérieur de la boucle et que tu n'utilise absolument jamais. C'est là ton erreur. Tu ne crée que des listede 1 éléments que tu jette à la fin de la boucle.
    David Delbecq Java developer chez HMS Industrial Networks AB.     LinkedIn | Google+

  3. #3
    Candidat au Club
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    janvier 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : janvier 2014
    Messages : 5
    Points : 3
    Points
    3

    Par défaut

    Salut,

    Merci de ta réponse, je débute en programmation Java et je n'ai plus programmé depuis 20 ans, il y a donc du taf
    Je vais analyser ce que tu me conseilles dès que je suis devant mon PC, merci encore pour ton message et pour le temps que tu m'as consacré.

  4. #4
    Candidat au Club
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    janvier 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : janvier 2014
    Messages : 5
    Points : 3
    Points
    3

    Par défaut

    Salut tchize_, j'ai tenu compte de tes remarques judicieuses et voici ce à quoi j'arrive. Le résultat me semble bon, en tout cas je réponds à la question.
    Maintenant, j'aimerais sans vouloir abuser, avoir ton avis critique sur mon code.

    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
     
    public static void main(String[] args) {
    		String elv, cls;
    		char reponse =' ';
    		ArrayList<String> tableauélève = new ArrayList<String>();
    		do{
    			System.out.println("Première étape, introduiser les noms et prénoms des élèves");
     
    			//Entrer le nom prénom de l'élève
    			Scanner sc =new Scanner(System.in);
    			System.out.println("Taper d'abord le nom et en suite prénom");
    			elv = sc.nextLine();
    			//Entrer la classe
    			Scanner sc1 =new Scanner(System.in);
    			System.out.println("Taper la classe :");
    			cls = sc1.nextLine();
    			tableauélève.add(elv + cls);
     
    			for (int i=0; i<tableauélève.size(); i++)
    			{
    				System.out.println(tableauélève.get(i));
    			}
     
    				do{
    					System.out.println("Voulez-vous introduire un autre élève ? O/N ");
    					Scanner sc2 =new Scanner(System.in);
    					reponse = sc2.nextLine().charAt(0);
    				}while(reponse !='N' && reponse!='O');
     
     
    		}while(reponse=='O');
    		System.out.println("Merci et au revoir ! ");	
    	}
     
    }
    Je suppose qu'il y a moyen de faire plus simple, mais pour un débutant cela me semble pas trop mal.
    Encore un tout grand merci pour ton aide.

  5. #5
    Modérateur

    Profil pro
    Inscrit en
    septembre 2004
    Messages
    11 311
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : septembre 2004
    Messages : 11 311
    Points : 19 168
    Points
    19 168

    Par défaut

    Hello,

    ça te dérange vraiment pas que les éléments de ta liste ressemblent à "Martin PaulCM2" ?

    A part ça, rien de très transcendant.

    # Il faudrait arrêter de créer un nouveau Scanner à chaque fois que tu veux lire un truc. Ton programme lit une seule console d'entrée, toujours le même System.in, donc il a besoin d'un seul Scanner pour la lire.

    Il faudrait créer un seul Scanner, au début du programme avant la boucle, et lire tout ce que tu as à lire avec lui.

    # Il faudrait des noms plus clairs que "elv" et "cls".

    # Il faudrait déclarer tes variables là où tu les initialises au lieu de le faire au début du programme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String nom = sc.nextLine();
    Cela évite de s'encombrer de variables à la portée inadaptées. Tu n'avais pas besoin de ces variables avant de leur donner une valeur, alors dans quel but les avoir quand même ?

    # L'inverse pour ta variable reponse qui sert de condition à la boucle globale. Tu es bien obligé de la déclarer avant puisque tu dois pouvoir la lire dans le while();

    Par contre rien ne t'oblige à lui donner une valeur avant que le premier nextLine() ne s'en occupe.

    # Pour la boucle qui affiche le contenu de ta liste, tu préféreras peut-être un for-each :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for(String eleve : tableauélève) {
      System.out.println(eleve);
    }
    C'est en général considéré plus clair, et ça évite une variable artificielle i.

    # Dans beaucoup de temps, tu préféreras sans doute programmer de manière plus générique et remplacer ta liste par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List<String> tableauélève = new ArrayList<String>();
    Certes il faut bien choisir un type de liste et tu as choisi ArrayList et c'est très bien.
    Mais ça c'est surtout au moment de créer la liste.

    Dans le reste de ton programme on se fiche de savoir si c'est une ArrayList, une LinkedList, une synchronizedList ou quoi que ce soit d'autre. Il n'y a donc aucune raison d'imposer que le type de la variable soit ArrayList. List suffit.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Candidat au Club
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    janvier 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : janvier 2014
    Messages : 5
    Points : 3
    Points
    3

    Par défaut

    Salut thelvin,

    Merci pour ta réponse et ton analyse, je regarde cela ce soir et je reviens vers toi. Mais tes remarques sont judicieuses, je t'avoue n'avoir jamais pensé à ça étant débutant.

    Encore un tout grand merci,

    Stu

  7. #7
    Modérateur

    Profil pro
    Inscrit en
    septembre 2004
    Messages
    11 311
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : septembre 2004
    Messages : 11 311
    Points : 19 168
    Points
    19 168

    Par défaut

    Ah ben oui pour du code débutant ça va plutôt bien c'est sûr.

    Mais puisqu'il y a toujours des trucs à dire...
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #8
    Candidat au Club
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    janvier 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : janvier 2014
    Messages : 5
    Points : 3
    Points
    3

    Par défaut

    J'ai modifié le code selon tes remarques et effectivement plus simple, plus propres et plus compréhensible. Malheureusement, pour améliorer l'affichage cela me parait un peu complexe vu mon niveau pour l'instant. Par contre, je comprends pas ce que tu vaux dire avec ma ArrayList

    Quand je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    List<String> tableauélève = new ArrayList();
    Il me retourne une erreur et je comprends pas pourquoi.
    Sinon voici mon code, je vais maintenant chercher à améliorer l'affichage.
    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
     
    public static void main(String[] args) {
    		char reponse =' ';
    		ArrayList<String> tableauélève = new ArrayList();
    		Scanner sc =new Scanner(System.in);
     
     
    		do{
    			String elv, cls;
     
    			System.out.println("Première étape, introduiser les noms et prénoms des élèves");
     
    			//Entrer le nom prénom de l'élève
     
    			System.out.println("Taper d'abord le nom et en suite prénom");
    			elv = sc.nextLine();
     
    			//Entrer la classe
     
    			System.out.println("Taper la classe :");
    			cls = sc.nextLine();
    			//J'ajoute les entrées à mon tableau élève
    			tableauélève.add(elv+" "+cls);
     
    			// Boucle qui liste le contenu de mon tableau.
    			for(String eleve : tableauélève) {
    				  System.out.println(eleve);
    				}
     
    			// Demande à l'utilisateur s'il veut sortir O/N
    				do{
    					System.out.println("Voulez-vous introduire un autre élève ? O/N ");
    					reponse = sc.nextLine().charAt(0);
    				}while(reponse !='N' && reponse!='O');		
    		}while(reponse=='O');
    		System.out.println("Merci et au revoir ! ");	
    	}
    }
    Encore merci pour le temps que tu me consacres.

  9. #9
    Membre confirmé Avatar de Cincinnatus
    Homme Profil pro
    Développeur Java
    Inscrit en
    mars 2007
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : mars 2007
    Messages : 227
    Points : 639
    Points
    639

    Par défaut

    Citation Envoyé par Stu76bel Voir le message

    Quand je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    List<String> tableauélève = new ArrayList();
    Il me retourne une erreur et je comprends pas pourquoi.
    Bonjour,

    Est-ce une erreur du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List cannot be resolved to a type
    ?

    Dans ce cas il faut importer le type List :
    en début de fichier.

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

Discussions similaires

  1. Enregistrer des données dans une base de donnée
    Par fabienlege dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 18/04/2007, 17h34
  2. Enregistrement des données dans la BD
    Par Panther dans le forum PHP & MySQL
    Réponses: 6
    Dernier message: 11/03/2007, 10h37
  3. Enregistrer des données dans une table à partir du code
    Par Ragnarok85 dans le forum Access
    Réponses: 4
    Dernier message: 24/01/2007, 14h03
  4. [C#] Comment enregistrer des données dans un base Mysql ?
    Par zidenne dans le forum Accès aux données
    Réponses: 3
    Dernier message: 21/09/2006, 18h51
  5. [VB6]enregistrer des données dans un fichier
    Par tchinette42 dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 19/04/2006, 19h55

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