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

Collection et Stream Java Discussion :

Modifier élément d'un ArrayList


Sujet :

Collection et Stream Java

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 3
    Points : 6
    Points
    6
    Par défaut Modifier élément d'un ArrayList
    Bonjour à vous tous,

    Je code en Java pour un exercice qu'on m'a donné en cours.
    Malgré ma compréhension, java n'exécute pas ce que je veux et après avoir cherché partout sur le net je n'arrive pas à trouver le problème..
    Je possède une classe Album comme ceci (avec les setters, etc, bien sûr):
    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
    public class Album {
     
    	private String titre, artiste;
    	private int annee;
    	private int prix;
    	private int stock;
     
    	// CONSTRUCTEUR avec tout les éléments
    	public Album(String artiste, String titre, int annee, int prix, int stock) {
    		this.artiste = artiste;
    		this.titre = titre;
    		this.annee = annee;
    		this.prix = prix;
    		this.stock = stock;
    	}
    D'une interface IMagasin :

    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
    package edu.magasin;
     
    import java.util.List;
     
    public interface IMagasin {
    	/**
             * Ajoute l'album au catalogue. Cet album sera ensuite disponible pour achat
             * au format MP3.
             */
    	public void ajouteAuCatalogue(Album album);
     
    	/**
             * Ajoute n unites de l'album au stock.
             */
    	public void ajouteAuStock(Album album, int n);
     
    	/**
             * Renvoie une liste d'albums correspondant au titre en parametre
             */
     
    	public List<Album> rechercheAlbumParTitre(String titre);
     
    	/**
             * Renvoie une liste d'albums par l'artiste en parametre
             */
    	public List<Album> rechercheAlbumParArtiste(String nomArtiste);
     
    	/**
             * Pour le format MP3 : achete l'album s'il est present au catalogue. Pour
             * le format CD Audio : achete l'album si au moins une unite en stock, puis
             * debite le stock d'une unite.
             */
    	public boolean acheteAlbum(Album album, Format format);
    }

    Je dispose d'une arraylist avec quelques éléments de départ comme ceci dans ma classe Magasin :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public List<Album> ListeAlbums() {
    		List<Album> Catalogue = new ArrayList<Album>();
    		// ///////////////////////Artiste/////Titre album//annee/prix/stock
    		Catalogue.add(new Album("Deftones", "Adrenaline", 1995, 5, 30));
    		Catalogue.add(new Album("Deftones", "Live in Hawaii", 2002, 30, 5));
    		Catalogue.add(new Album("Ez3kiel", "Handle with Care", 2001, 11, 0));
    		Catalogue.add(new Album("Chopin", "Nocturnes", 2000, 10, 10));
    		Catalogue.add(new Album("Carbon Airways", "Black Sun", 2013, 20, 30));
    		return Catalogue;
    	}
    J'essaye de : modifier le stock d'une liste et d'ajouter un élement à la liste

    Voilà comme j'essaye de faire par exemple pour ajouter un élément :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    System.out.println("\n\n");
    				Scanner sc4 = new Scanner(System.in);
    				System.out.print("Veuillez saisir le nom de l'artiste :");
    				String artiste = sc4.nextLine();
    				System.out.print("Veuillez saisir le titre de l'album :");
    				String titre = sc4.nextLine();
    				System.out.print("Veuillez saisir l'année de sortie :");
    				int annee = sc4.nextInt();
    				System.out.print("Veuillez saisir le prix :");
    				int prix = sc4.nextInt();
     
    				Album nouveau = new Album(artiste, titre, annee, prix, 0);
    				M.ajouteAuCatalogue(nouveau);
    Qui renvoie ensuite à la méthode ajouteAuCatalogue :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public void ajouteAuCatalogue(Album album) {
    		ListeAlbums().add(album);
     
    	}

    Et après l'afficher avec ma méthode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public void afficheToutLesAlbums() {
    		for (int i = 0; i < ListeAlbums().size(); i++) {
    			System.out.println("Album [artiste= "
    					+ ListeAlbums().get(i).getArtiste() + ", titre= "
    					+ ListeAlbums().get(i).getTitre() + ",sortie= "
    					+ ListeAlbums().get(i).getAnnee() + ",id unique= " + i
    					+ "], stock = " + ListeAlbums().get(i).getStock());
    		}
     
    	}

    Rien ne marche. De même pour la démarche pour changer le stock, quand j'affiche les variables tout est là, mais impossible d'agir sur la liste..
    Il doit me manquer un truc tout bête pour comprendre mais je n'y arrive pas..
    J'espère avoir été assez clair ^^

    Merci d'avance pour vos réponses !

  2. #2
    Membre expérimenté Avatar de Nico02
    Homme Profil pro
    Developpeur Java/JEE
    Inscrit en
    Février 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Developpeur Java/JEE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 728
    Points : 1 622
    Points
    1 622
    Par défaut
    Salut,

    Le problème c'est que pour récupérer ta liste tu fais appel à la méthode ListeAlbums() qui va reconstruire ta liste à chaque fois.

    Du coup dès que tu appelles cette méthode, tu va perdre tout ce que tu as pu rajouter entre temps.

    Quand tu fais M.ajouteAuCatalogue(nouveau); tu rajoutes bien ton nouvel album dans ta liste.
    Mais après quand tu fais for (int i = 0; i < ListeAlbums().size(); i++) tu ra la reconstruire et donc perdre ta modif.

    Il te faut faire appel au getter de ta liste pour y accéder et non pas à la méthode d'initialisation.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public ArrayList<Album> getAlbumList(){
      return catalogue;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public void ajouteAuCatalogue(Album album) {
      getAlbumList().add(album);
    }
    Cdt.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 3
    Points : 6
    Points
    6
    Par défaut
    Salut et merci de ta réponse !

    Je me disais bien qu'il y avait une affaire du genre mais je n'ai pas compris où instancier le getter ?

    Parce que ma classe Magasin est comme ceci :

    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
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    package edu.magasin;
     
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Scanner;
     
    public class Magasin implements IMagasin {
     
    	static int choix, pos;
     
    	private List<Album> ListeAlbums() {
    		List<Album> Catalogue = new ArrayList<Album>();
    		// ///////////////////////Artiste/////Titre album//annee/prix/stock
    		Catalogue.add(new Album("Deftones", "Adrenaline", 1995, 5, 30));
    		Catalogue.add(new Album("Deftones", "Live in Hawaii", 2002, 30, 5));
    		Catalogue.add(new Album("Ez3kiel", "Handle with Care", 2001, 11, 0));
    		Catalogue.add(new Album("Chopin", "Nocturnes", 2000, 10, 10));
    		Catalogue.add(new Album("Carbon Airways", "Black Sun", 2013, 20, 30));
     
    		return Catalogue;
    	}
    	public ArrayList<Album> getAlbumList(){
    		  return Catalogue;
    		}
     
    	public static void main(String[] args) {
     
    		Magasin M = new Magasin();
     
    		// Album D = new Album("Donnie", "Holy", 2009);
    		// M.ajouteAuCatalogue(D);
    		M.Menu();
    		while (choix != 7) {
     
    			Scanner sc = new Scanner(System.in);
    			System.out.print("Votre choix : ");
    			int choix = sc.nextInt();
     
    			switch (choix) {
    			case 1:
    				M.afficheToutLesAlbums();
    				System.out.println("\n\n\n");
    				M.Menu();
    				break;
    			case 2:
     
    				M.afficheToutLesAlbums();
    				System.out.println("\n\n");
    				Scanner sc0 = new Scanner(System.in);
    				System.out
    						.print("Veuillez indiquer l'id unique de l'album voulu (voir ci-dessus) :");
    				int id = sc0.nextInt();
    				pos = id;
    				System.out.println("Vous avez choisi l'album : [artiste= "
    						+ M.ListeAlbums().get(id).getArtiste() + ", titre= "
    						+ M.ListeAlbums().get(id).getTitre() + ",sortie= "
    						+ M.ListeAlbums().get(id).getAnnee() + ",id unique= "
    						+ id + "]");
    				Album achat = new Album(M.ListeAlbums().get(id).getArtiste(), M
    						.ListeAlbums().get(id).getTitre(), M.ListeAlbums()
    						.get(id).getAnnee(), M.ListeAlbums().get(id).getPrix(),
    						M.ListeAlbums().get(id).getStock());
    				System.out.println("1/ " + Format.CD_AUDIO.toString());
    				System.out.println("2/ " + Format.MP3.toString());
    				int format;
    				do {
    					System.out.print("Veuillez choisir le format voulu :");
    					format = sc0.nextInt();
    					// System.out.println(format);System.exit(0);TEST VALEUR
    					// FORMAT
    					if (format == 1) {
    						M.acheteAlbum(achat, Format.CD_AUDIO);
    						M.Menu();
    						break;
    					}
    					if (format == 2) {
    						M.acheteAlbum(achat, Format.MP3);
    						M.Menu();
    						break;
    					}
    				} while (format != '1' || format != '2');
     
    				break;
    			case 3:
    				// Recherche par nom d'artiste
    				Scanner sc1 = new Scanner(System.in);
    				System.out.print("Veuillez saisir un artiste :");
    				String str = sc1.nextLine();
     
    				M.rechercheAlbumParArtiste(str);
    				System.out.println("\n\n\n");
    				M.Menu();
    				break;
    			case 4:
    				// Recherche par titre album
    				Scanner sc2 = new Scanner(System.in);
    				System.out.print("Veuillez saisir un titre :");
    				String str2 = sc2.nextLine();
     
    				M.rechercheAlbumParTitre(str2);
    				System.out.println("\n\n\n");
    				M.Menu();
    				break;
    			case 5:
    				M.afficheToutLesAlbums();
    				System.out.println("\n\n");
    				Scanner sc3 = new Scanner(System.in);
    				System.out
    						.print("Veuillez indiquer l'id unique de l'album voulu (voir ci-dessus) :");
    				int n = sc3.nextInt();
    				System.out.println("Vous avez choisi l'album : [artiste= "
    						+ M.ListeAlbums().get(n).getArtiste() + ", titre= "
    						+ M.ListeAlbums().get(n).getTitre() + ",sortie= "
    						+ M.ListeAlbums().get(n).getAnnee() + ",id unique= "
    						+ n + "]");
    				System.out
    				.print("Veuillez saisir la nouvelle valeur du stock :");
    				int unites = sc3.nextInt();
     
    				//System.exit(0);
    				//M.ListeAlbums().set(n, new Album(M.ListeAlbums().get(n).getArtiste(), M.ListeAlbums().get(n).getTitre(), M.ListeAlbums().get(n).getAnnee(), M.ListeAlbums().get(n).getPrix(), unites));
    				M.afficheToutLesAlbums();
    				System.exit(0);
    				break;
    			case 6:
    				System.out.println("\n\n");
    				Scanner sc4 = new Scanner(System.in);
    				System.out.print("Veuillez saisir le nom de l'artiste :");
    				String artiste = sc4.nextLine();
    				System.out.print("Veuillez saisir le titre de l'album :");
    				String titre = sc4.nextLine();
    				System.out.print("Veuillez saisir l'année de sortie :");
    				int annee = sc4.nextInt();
    				System.out.print("Veuillez saisir le prix :");
    				int prix = sc4.nextInt();
     
    				Album nouveau = new Album(artiste, titre, annee, prix, 0);
    				M.ajouteAuCatalogue(nouveau);
    				break;
    			case 7:
    				System.exit(0);
    				break;
    			default:
    				;
    			}
    		}
     
    	}
     
     
    	 void Menu() {
    		System.out
    				.println("-----------------------------------------------------");
    		System.out.println("                          MENU");
    		System.out
    				.println("-----------------------------------------------------");
    		System.out.println("1/ Afficher tout les albums du catalogue");
    		System.out.println("2/ Acheter un album");
    		System.out.println("3/ Rechercher un album par nom d'artiste");
    		System.out.println("4/ Rechercher un album par titre d'album");
    		System.out.println("5/ Modifier le stock d'un album");
    		System.out.println("6/ Ajouter un album");
    		System.out.println("7/ Quitter l'application");
    		System.out
    				.println("-----------------------------------------------------");
     
    	}
     
    	/** Affiche tout les albums du Catalogue présent **/
    	public void afficheToutLesAlbums() {
    		for (int i = 0; i < ListeAlbums().size(); i++) {
    			System.out.println("Album [artiste= "
    					+ ListeAlbums().get(i).getArtiste() + ", titre= "
    					+ ListeAlbums().get(i).getTitre() + ",sortie= "
    					+ ListeAlbums().get(i).getAnnee() + ",id unique= " + i
    					+ "], stock = " + ListeAlbums().get(i).getStock());
    		}
     
    	}
     
    	public void ajouteAuCatalogue(Album album) {
    		ListeAlbums().add(album);
    		//getAlbumList().add(album);
     
    	}
     
     
    	public void ajouteAuStock(Album album, int n) {
     
    	}
     
    	// Recherche par titre album
    	public List<Album> rechercheAlbumParTitre(String titre) {
     
    		for (int i = 0; i < ListeAlbums().size(); i++) {
    			String resultat = ListeAlbums().get(i).getTitre().toLowerCase();
    			if (resultat.equals(titre)) {
    				System.out.println("Album [artiste= "
    						+ ListeAlbums().get(i).getArtiste() + ", titre= "
    						+ ListeAlbums().get(i).getTitre() + ",sortie= "
    						+ ListeAlbums().get(i).getAnnee() + ",id unique= " + i
    						+ "], stock = " + ListeAlbums().get(i).getStock());
    			}
    		}
    		return null;
    	}
     
    	// Recherche par artiste
    	public List<Album> rechercheAlbumParArtiste(String nomArtiste) {
     
    		for (int i = 0; i < ListeAlbums().size(); i++) {
    			String resultat = ListeAlbums().get(i).getArtiste().toLowerCase();
    			if (resultat.equals(nomArtiste)) {
    				System.out.println("Album [artiste= "
    						+ ListeAlbums().get(i).getArtiste() + ", titre= "
    						+ ListeAlbums().get(i).getTitre() + ",sortie= "
    						+ ListeAlbums().get(i).getAnnee() + ",id unique= " + i
    						+ "], stock = " + ListeAlbums().get(i).getStock());
    			}
    		}
     
    		return null;
    	}
     
    	public boolean acheteAlbum(Album album, Format format) {
    		boolean possible = false;
    		if (format.toString().equals("CD_AUDIO")) {
    			if (album.getStock() > 0) {
    				possible = true;
    				album.setStock(album.getStock() - 1);
    				ListeAlbums().set(pos, album);
    				System.out.println("Achat effectué !");
    				System.out.println(ListeAlbums().get(pos).getStock());
    				System.exit(0);
    				// System.out.println(album.getStock());System.exit(0);
    			} else {
    				possible = false;
    				System.out.println("L'album est en rupture de stock.");
    			}
    		}
     
    		if (format.toString().equals("MP3")) {
    			possible = true;
    		}
    		return possible;
    	}
     
    }
    et avec mon getter j'ai une erreur : Catalogue cannot be resolved to a variable

    Logique vu la durée de vie de mon Catalogue

  4. #4
    Membre expérimenté Avatar de Nico02
    Homme Profil pro
    Developpeur Java/JEE
    Inscrit en
    Février 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Developpeur Java/JEE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 728
    Points : 1 622
    Points
    1 622
    Par défaut
    En fait il faut que tu passes ton catalogue comme un attribut de ta classe. De cette manière tu pourras y accéder quand tu veux via un getter.

    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
     
    class Magasin implements IMagasin
    {
      private ArrayList<Album> catalogue;
     
      public Magasin()
      {
        catalogue = new ArrayList<Album>();
        initCatalogue();
      }
     
      private void initCatalogue() 
      {	
        // ///////////////////////Artiste/////Titre album//annee/prix/stock
        catalogue.add(new Album("Deftones", "Adrenaline", 1995, 5, 30));
        catalogue.add(new Album("Deftones", "Live in Hawaii", 2002, 30, 5));
        catalogue.add(new Album("Ez3kiel", "Handle with Care", 2001, 11, 0));
        catalogue.add(new Album("Chopin", "Nocturnes", 2000, 10, 10));
        catalogue.add(new Album("Carbon Airways", "Black Sun", 2013, 20, 30));
     
      }
     
      public ArrayList<Album> getCatalogue(){
        return catalogue;
      }
     
      public void ajouteAuCatalogue(Album album) {
        catalogue.add( album );
      }
    }
    EDIT : J'ai modifié un peu le code car j'avais laisser trainer quelques "erreurs"
    - La méthode initAlbum() doit être de type void puisqu'elle ne revoie plus rien.
    - Elle doit être privée car personne ne doit pouvoir initialiser la liste à par le magasin lui même.
    - C'est catalogue et non pas Catalogue (bien faire attention au nom )
    - J'ai renommé le getter en getCatalogue(). Il faut toujours faire en sorte qu'il y ai une concordance entre le nom des variables et leurs accesseurs. Cela permet de garder un code propre et compréhensible!
    - Pareil pour la méthode initCatalogue()

    Cdt.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 3
    Points : 6
    Points
    6
    Par défaut
    Ah mais oui !!!! Où avais je la tête ! C'était vraiment un truc tout bête !

    DU coup tout ce que j'avais fait fonctionne ! Merci beaucoup de ton aide (trop d'émotion.)

    Bonne journée à toi

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

Discussions similaires

  1. Comparaison des éléments d'une ArrayList
    Par Emilie MARQUOIS-OGEZ dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 31/10/2006, 15h17
  2. modifier le comportement d'ArrayList
    Par Zorgz dans le forum API standards et tierces
    Réponses: 8
    Dernier message: 09/10/2006, 13h31
  3. Réponses: 3
    Dernier message: 06/09/2006, 12h43
  4. Réponses: 7
    Dernier message: 16/05/2006, 15h40

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