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 :

ArrayList et random


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2012
    Messages : 93
    Par défaut ArrayList et random
    Bonsoir, ce code permet d'ajouter dans arraylist des enregistrements de type Note, mais le problème lorsque j'affiche la premier enregistrement il m'affiche une autre résultat
    exemple d’exécution:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    3
    Note 1 = 55
    Note 2= 45
    Note 1 = 58
    Note 2= 41
    Note 1 = 43
    Note 2= 40
    **********
    la 1ére enreg est : 
    Note 1 = 50
    Note 2= 52
    normalement il m'affiche:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    3
    Note 1 = 55
    Note 2= 45
    Note 1 = 58
    Note 2= 41
    Note 1 = 43
    Note 2= 40
    **********
    la 1ére enreg est : 
    Note 1 = 55
    Note 2= 45

    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
    public class Note {
    	private int n1;
    	private int n2;
    	public Note() {
    		getN1();
    		getN2();
    	}
    	@Override
    	public String toString() {
    		return "Note 1 = " + getN1() + "\nNote 2= " + getN2();
    	}
    	public int getN1() {
    		return n1 = 40 + (int) (Math.random() * 20);
    	}
    	public void setN1(int n1) {
    		this.n1 = n1;
    	}
    	public int getN2() {
    		return n2 = 40 + (int) (Math.random() * 20);
    	}
    	public void setN2(int n2) {
    		this.n2 = n2;
    	}
    }

    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
     
    import java.util.*;
    public class Main {
    	public static void main(String[] args){
    		List<Note> note = new ArrayList<Note>();
    		Note t = new Note();
    		note.add(t);
    		note.add(t);
    		note.add(t);
    		System.out.println(note.size());
    		for (Note s : note){
    			System.out.println(s);
    		}
    		System.out.println("**********");
    		System.out.println("la 1ére enreg est : \n"+note.get(0));
    	}
    }

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Non seulement ton code ajoute trois fois le même objet et non pas trois objets différent. Mais vu que la valeur de n1 et n2 change aléatoirement à chaque appel au getter, je ne vois pas en quoi tu pourrais prétendre savoir à l'avance ce que ce code va sortir. Chaque appel à getN1 /getN2 sortira une nouvelle valeur aléatoire, donc forcément chaque appel à toString sortira un autre truc.

    Si tu veux que la valeur reste, ce n'est pas dans le getter qu'il faut l'initialiser:

    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
    public class Note {
    	private int n1 = 40 + (int) (Math.random() * 20);
    	private int n2 = 40 + (int) (Math.random() * 20);
    	@Override
    	public String toString() {
    		return "Note 1 = " + getN1() + "\nNote 2= " + getN2();
    	}
    	public int getN1() {
    		return n1;
    	}
    	public void setN1(int n1) {
    		this.n1 = n1;
    	}
    	public int getN2() {
    		return n2;
    	}
    	public void setN2(int n2) {
    		this.n2 = n2;
    	}
    }

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2012
    Messages : 93
    Par défaut
    Mais lorsque je fait comme ça, la valeur de n1 et n2 ne change pas

    Nom : 1.png
Affichages : 473
Taille : 43,5 Ko

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Ben oui, si ce n'est pas ce que tu veux, je me demande ce que tu cherche. D'un coté tu te plaints, si j'ai bien compris que ça change, de l'autre que ca ne change pas Faudrait être plus explicite sur ce que tu cherche.

  5. #5
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2012
    Messages : 93
    Par défaut
    je veux afficher la premier indice qui est dans arraylist

    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
     
    public class Note {
    	private int n1;
     
    	public Note() {
    		getN1();
    	}
     
    	@Override
    	public String toString() {
    		return "Note = " + getN1();
    	}
     
    	public int getN1() {
    		return n1 = 40 + (int) (Math.random() * 20);
    	}
     
    	public void setN1(int n1) {
    		this.n1 = n1;
    	}
    }
     
    public class Main {
    	public static void main(String[] args) {
    		List<Note> note = new ArrayList<Note>();
    		Note t = new Note();
    		note.add(t);
    		note.add(t);
    		note.add(t);
    		for (Note s : note) {
    			System.out.println(s);
    		}
    	}
    }

  6. #6
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Citation Envoyé par Aymenkn Voir le message
    je veux afficher la premier indice qui est dans arraylist
    Dans tous les cas c'est ce que ton code fait. Donc tu n'a aucun problème. La seule variation entre tes codes, c'est que le premier change aléatoirement tout le temps le contenu de Note, alors que le second préserve les valeurs qui lui sont attribuées.

    Et comme je te l'ai dit, tu a mis le même objet partout dans l'arraylist, donc dans ton dernier resultat, il est normal que tu affiche tout le temps la même chose. Si tu veux mettre des objets note différents, il faut en créer plusieurs.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    		List<Note> note = new ArrayList<Note>();
    		note.add(new Note());
    		note.add(new Note());
    		note.add(new Note());

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

Discussions similaires

  1. [ STRUTS ][ JSP ][ ArrayList] un lien pour trier
    Par LoulouFifi dans le forum Servlets/JSP
    Réponses: 7
    Dernier message: 03/02/2004, 17h24
  2. Script assez difficile avec random
    Par LFC dans le forum Requêtes
    Réponses: 6
    Dernier message: 01/08/2003, 18h02
  3. [langage] random sur liste ou tableau
    Par martijan dans le forum Langage
    Réponses: 2
    Dernier message: 15/07/2003, 14h47
  4. [VB6] : pour faire un Randomize sous vb... merci
    Par delnic dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 22/01/2003, 15h49
  5. Random en Assembleur
    Par funx dans le forum Assembleur
    Réponses: 9
    Dernier message: 02/09/2002, 17h05

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