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 :

comparaison des elements d'un arraylist


Sujet :

Collection et Stream Java

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2015
    Messages : 30
    Points : 17
    Points
    17
    Par défaut comparaison des elements d'un arraylist
    bonjour!
    j'aimerai comparer les elements de mon arraylist index a index et les changer une a une par les valeurs correspondants.
    mon code ne me montre pas d'erreur mais ne fait pas le remplacement . est ce que vous pouvez m'aider a voir clair merci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public AcideRibonucleique complement(){
              for(int i=0;i<this.size();i++)  { 
                 if(get(i)==Nucleotide.A)
                 {
                 Nucleotide.set(Nucleotide.A, Nucleotide.U);
                  if(get(i)==Nucleotide.G) {      
                  Nucleotide.set(Nucleotide.G, Nucleotide.C);
                  if(get(i)==Nucleotide.C){
    }}}}
    return this;

  2. #2
    Membre chevronné
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Points : 1 984
    Points
    1 984
    Par défaut
    Citation Envoyé par kylan Voir le message
    j'aimerai comparer les elements de mon arraylist index a index et les changer une a une par les valeurs correspondants.
    mon code ne me montre pas d'erreur mais ne fait pas le remplacement.
    Tu travailles sur une fonction statique alors que, visiblement, ce n'est pas ce que tu veux. Par ailleurs, ton imbrication de if semble tres suspecte.

    Est ce que tu peux poster le code de Nucleotide.set ?

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2015
    Messages : 30
    Points : 17
    Points
    17
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public enum Nucleotide {
    	A, B, C, D, G, H, K, M, N, R, S, U, V, W, Y;
     
        public static void set(Nucleotide nucleotide, Nucleotide nucleotide0) {
            nucleotide= nucleotide;
            nucleotide0=nucleotide0;
     
        }

  4. #4
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Bonjour,

    Ce code ne sert à rien:
    Citation Envoyé par kylan Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        public static void set(Nucleotide nucleotide, Nucleotide nucleotide0) {
            nucleotide= nucleotide;
            nucleotide0=nucleotide0;
     
        }

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        public static void set(Nucleotide nucleotide, Nucleotide nucleotide0) {
            Nucleotide temp = nucleotide;
            nucleotide= nucleotide0;
            nucleotide0=temp;
     
        }
    A+.

  5. #5
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Hum, ce code ne sert pas plus que l'autre (il ne fait qu'échanger localement les valeurs des paramètres, qui ne sont pas utilisés ultérieurement, donc pour rien) :
    Citation Envoyé par andry.aime Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        public static void set(Nucleotide nucleotide, Nucleotide nucleotide0) {
            Nucleotide temp = nucleotide;
            nucleotide= nucleotide0;
            nucleotide0=temp;
     
        }
    @kylan,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public AcideRibonucleique complement(){
              for(int i=0;i<this.size();i++)  { 
                 if(get(i)==Nucleotide.A)
                 {
                 Nucleotide.set(Nucleotide.A, Nucleotide.U);
                  if(get(i)==Nucleotide.G) {      
                  Nucleotide.set(Nucleotide.G, Nucleotide.C);
                  if(get(i)==Nucleotide.C){
    }}}}
    return this;
    Cette méthode est dans la classe AcideRibonucleique, qui est à priori une List. Il te suffit donc de faire des set() comme tu fais les get() :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public AcideRibonucleique complement(){
       for(int i=0;i<this.size();i++)  { 
           if(get(i)==Nucleotide.A) {
              set(i, Nucleotide.U);
           }
       }
       return this;
    }
    Voici un code qui remplace les A par des U.

    Après, je rejoins @hwoarang sur ses doutes quant à l'imbrication de if, qui mérite quand même une indentation plus soignée (qui permet de voir tout de suite qu'il y a un problème) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    if ( get(i)==Nucleotide.A ) {
       set(i, Nucleotide.U);
       if ( get(i)==Nucleotide.G ) {      
           set(i, Nucleotide.C);
           if(get(i)==Nucleotide.C) {
           }
       }
    }
    Si on remplace A par U, il est impossible qu'il valle G : donc inutile de tester ce cas, et tous les autres imbriqués, qui ne seront jamais exécutés.
    Au lieu de if, utilise un switch, ce serait bien plus clair.

    Voire un switch avec replaceAll, dans une lambda :
    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
     
    public AcideRibonucleique complement(){
       replaceAll(nucleotide-> {
          switch(nucleotide) {
          case A:
             return Nucleotide.U;
          case G:
             return Nucleotide.G;
          case C:
             /** ...return jesaispasquoi **/
          /**.... etc ... **/
          default:
              throw new IllegalStateException("Unknown nucleotide");
        }
    });
    return this;
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  6. #6
    Membre chevronné
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Points : 1 984
    Points
    1 984
    Par défaut
    Citation Envoyé par joel.drigo Voir le message
    Voire un switch avec replaceAll, dans une lambda
    Les lambdas quand il y a des erreurs aussi basiques, je n'aurais pas tenté

    Je partirais sur un code plus simple (mais le switch est quand meme clairement plus lisible).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    for(int i=0;i<this.size();i++)  {
       switch(get(i)) {
       case Nucleotide.A:
          set(i, Nucleotide.U);
          break;
     
       ...
    }
    }

  7. #7
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Citation Envoyé par joel.drigo Voir le message
    Salut,

    Hum, ce code ne sert pas plus que l'autre (il ne fait qu'échanger localement les valeurs des paramètres, qui ne sont pas utilisés ultérieurement, donc pour rien) :
    J'ai pas lu la discussion depuis le début . Maintenant j'ai compris

    Sinon, un Map fera bien l'affaire:
    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 enum Nucleotide{
    		A, B, C, D, G, H, K, M, N, R, S, U, V, W, Y;
     
    		private final static Map<Nucleotide, Nucleotide> NUCLEOTIDE_LIST;
    			static{
    				NUCLEOTIDE_LIST = new HashMap<Nucleotide, Nucleotide>();
    				NUCLEOTIDE_LIST.put(Nucleotide.A, Nucleotide.U);
    				NUCLEOTIDE_LIST.put(Nucleotide.U, Nucleotide.A);
    				....;
    			}
     
    		public Nucleotide getComplement(){
    			return NUCLEOTIDE_LIST.get(this);
    		}
    	}
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    List<Nucleotide> arn = new ArrayList<Nucleotide>();
    		arn.add(Nucleotide.A);
    		arn.add(Nucleotide.U);
    		for(Nucleotide n: arn){
    			System.out.println(n.getComplement());
    		}
    A+.

  8. #8
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par hwoarang Voir le message
    Les lambdas quand il y a des erreurs aussi basiques, je n'aurais pas tenté
    C'était pour éviter 2 mettre deux fois le code du switch Me semblait que l'exemple avec la lambda était suffisant pour évoquer la forme du switch. Et encore, j'aurais pu parler de la solution avec une EnumMap :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    private static final EnumMap<Nucleotide, Nucleotide> COMPLEMENTS = createComplementMap();
    private static EnumMap<Nucleotide, Nucleotide> createComplementMap() {
       EnumMap<Nucleotide, Nucleotide> map = new EnumMap<>(Nucleotide.class);
       map.put(Nucleotide.A, Nucleotide.U);
       map.put(Nucleotide.G, Nucleotide.C);
       /** ... **/
       return map;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public AcideRibonucleique complement() {
       for (int i = 0; i < this.size(); i++) {
           set(i, COMPLEMENTS.get(get(i)));
       }
       return this;
    }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  9. #9
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par andry.aime Voir le message
    [...]
    Oui, la solution d'une méthode complement() dans l'enum est sans doute la meilleure. J'y avais pensé au début sans map, mais ça obligeait à écrire ce genre de truc, qui devient moins clair pour le coup :

    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
    public enum Nucleotide {
     
    	A,G,C(G),U(A);
     
     
    	private Nucleotide complement;
    	private Nucleotide() {
    	}
    	private Nucleotide(Nucleotide complement) {
    		this.complement=complement;
    		this.complement.complement=this;
    	}
     
    	public Nucleotide getComplement() {
    		return complement;
    	}
     
    }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

Discussions similaires

  1. Réponses: 4
    Dernier message: 31/07/2014, 16h17
  2. comparaison des elements de deux chaines
    Par karaudrey88 dans le forum Langage
    Réponses: 2
    Dernier message: 25/09/2013, 12h38
  3. [Débutante] Comparaison des éléments d'une Structure
    Par MireilleC dans le forum MATLAB
    Réponses: 4
    Dernier message: 04/08/2007, 12h11
  4. 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
  5. trier un tableau et compter des elements du tableau
    Par remi51 dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 17/06/2002, 16h51

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