Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1639 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  ArrayLists de int[] dans un ArrayList...

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

ArrayLists de int[] dans un ArrayList...

n°2307400
Lt Ripley
Ils ont tout niqué
Posté le 07-11-2017 à 21:21:58  profilanswer
 

Bonjour
 
Je poursuis mon apprentissage de Java : codingame en ce moment
 
Je sèche.  C'est la première fois que j'utilise un ArrayList, en plus direct je l’emboîte dans un autre ArrayList.
 
Je n'arrive pas pas ajouter mes int[] (de 2 int) dans un ArrayList situé dans un autre ArrayList
 

Code :
  1. private ArrayList<ArrayList<int[]>> isExit (int EI, ArrayList<int[]> nodes)  {
  2.    
  3.         ArrayList<ArrayList<int[]>> arrExit;
  4.         for (int i=0 ; i<20 ; i++)  {            // faut que je les déclare ?  Ca ne passe pas ('.class' expected)
  5.             arrExit.add(ArrayList<int[]> );
  6.         }
  7.    
  8.         for (int[] coord : nodes)  {
  9.        
  10.             if (coord[0] == EI || coord[1] == EI)  {
  11.            
  12.                 int temp[] = {coord[0], coord[1]};
  13.            
  14.                 arrExit(EI).add(temp);   // Et comment j'insère mes int[] dans les ArrayList dans l'ArrayList ?  Je ne sais pas faire...
  15.                
  16.             }
  17.         }
  18.         return arrExit;
  19. }


 
Merci pour votre aide !


Message édité par Lt Ripley le 07-11-2017 à 21:23:51
mood
Publicité
Posté le 07-11-2017 à 21:21:58  profilanswer
 

n°2307435
masklinn
í dag viðrar vel til loftárása
Posté le 08-11-2017 à 13:19:29  profilanswer
 

Citation :

Je poursuis mon apprentissage de Java : codingame en ce moment
 
Je sèche.  C'est la première fois que j'utilise un ArrayList, en plus direct je l’emboîte dans un autre ArrayList.


Aller lire un tutoriel java ou deux pourrait être une bonne idée non? Et lire les messages du compilateur

Code :
  1. ArrayList<ArrayList<int[]>> arrExit


Java fait pas dans la conception virginale, là t'as déclaré une variable d'un certain type mais t'as rien mis dedans, Java risque de pas être content.

Code :
  1. arrExit.add(ArrayList<int[]> );


Initialiser un objet ça se fait avec "new", "ArrayList<int[]>" c'est une classe qui n'est pas intrinsèquement un objet, s'pour ça que le compilateur te suggère de rajouter ".class" pour récupérer un objet classe. Si tu fais ça (et que t'enlèves le <int[]> parce-que Java gère pas les objets classe générique) il va te dire que tu peux pas mettre une classe dans ton ArrayList:

Citation :

error: no suitable method found for add(Class<ArrayList> )


En java, les objets sont initialisés avec "new".

Code :
  1. arrExit(EI).add(temp);   // Et comment j'insère mes int[] dans les ArrayList dans l'ArrayList ?  Je ne sais pas faire…


Ce truc veut strictement rien dire, une arraylist c'est pas une méthode, ça s'appelle pas. T'as songé à aller lire la doc?


Message édité par masklinn le 08-11-2017 à 13:19:59

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°2307446
Lt Ripley
Ils ont tout niqué
Posté le 08-11-2017 à 14:37:22  profilanswer
 

Merci beaucoup pour tes explications.
 
Je me rends compte que je suis à la ramasse.
 
Je vais aller lire la doc
 
Merci !!
 
Edit : pour New je suis bien content d'avoir appris qu'on initialise avec, j'avais souvent eu des problemes à ce niveau.


Message édité par Lt Ripley le 08-11-2017 à 14:40:51
n°2307624
Lt Ripley
Ils ont tout niqué
Posté le 11-11-2017 à 19:31:10  profilanswer
 

Bon j'y suis arrivé !  J'ai voulu utiliser des Vectors (qui me semblent en fin de compte bien similaires aux ArrayList) car en c++ on y accède comme ça : vector[i][j].  Mais pas en Java !  Même si en fait c'est simple : vector.get(i).get(j)[k]  pour un Vector de Vectors de int[], avec les set qui vont bien à l'aide de Vectors temp reconstitués.
 
Voici la déclaration et initialisation de mon Vector de Vector principal
 

Code :
  1. Vector<Vector<int[]>> vecvec = new Vector<Vector<int[]>>();
  2.         for (int i = 0 ; i < N ; i++) { vecvec.addElement(new Vector<int[]>()) ; }


 
Et une méthode
 

Code :
  1. // définir le 3eme int à 1 dans les int[] s'il s'agit d'un exit
  2.     private static Vector<Vector<int[]>> setExit (int[] tableauExit, Vector<Vector<int[]>> vecvec)  {
  3.      
  4.         for (int i = 0 ; i < vecvec.size() ; i++) {
  5.        
  6.             for (int j = 0 ; j < vecvec.get(i).size() ; j++) {
  7.                
  8.                 for (int SI : tableauExit) {
  9.            
  10.                     if ((vecvec.get(i).get(j)[0] == SI) || (vecvec.get(i).get(j)[1] == SI)) {
  11.                    
  12.                         Vector<int[]> vecTemp = vecvec.get(i);
  13.                        
  14.                         int[] tempTab = { vecvec.get(i).get(j)[0] , vecvec.get(i).get(j)[1] , 1}; // passage à 1 au lieu de 0
  15.                        
  16.                         vecTemp.set(j, tempTab);
  17.                        
  18.                         vecvec.set(i, vecTemp);
  19.                     }
  20.                 }
  21.             }     
  22.         }
  23.         return vecvec;
  24.     }


 
Je vais continuer à lire la doc des ArrayList pour y passer définitivement, mais apparemment c'est kif kif, au moins à mon niveau
 
Et puis je capte bien mieux comment utiliser une methode (avant j'avais des variables globales  [:tinostar])
 
Merci encore

Message cité 1 fois
Message édité par Lt Ripley le 11-11-2017 à 20:37:47
n°2307629
masklinn
í dag viðrar vel til loftárása
Posté le 11-11-2017 à 20:40:25  profilanswer
 

Lt Ripley a écrit :

Bon j'y suis arrivé !  J'ai voulu utiliser des Vectors (qui me semblent en fin de compte bien similaires aux ArrayList)


Vector c'est une "ancienne" version d'ArrayList (qui a été mis à jour par la suite pour être plus proche, c'est pour ça qu'il y a des méthodes redondantes genre add et addElement). C'est pas utilisé dans le code moderne. Idem Hashtable (vieux) contre HashMap (moderne) et Enumeration (vieux) contre Iterator (moderne). Ç'est équivalent, mais les lecteurs/collègues vont se poser des questions s'ils te voient utiliser Vector.

Lt Ripley a écrit :

car en c++ on y accède comme ça : vector[i][j].  Mais pas en Java !


Nope, pas de surcharge d'opérateurs en Java, donc l'indexation avec [] c'est uniquement pour les arrays "natifs".

Code :
  1. for (int i = 0 ; i < vecvec.size() ; i++) {


Tu peux itérer sur une collection (vecteur ou arraylist) comme sur un array, donc la boucle externe peut devenir:

Code :
  1. for (List<int[]> vecTemp: vecvec) {


Code :
  1. int[] tempTab = { vecvec.get(i).get(j)[0] , vecvec.get(i).get(j)[1] , 1}; // passage à 1 au lieu de 0


Au final tu utilises pas vraiment ton int[] comme un array, plus comme une structure, en Java "normal" tu définirais une classe dédiée pour ça.


Message édité par masklinn le 11-11-2017 à 20:40:37

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°2307631
Lt Ripley
Ils ont tout niqué
Posté le 11-11-2017 à 21:01:18  profilanswer
 

Merci beaucoup pour ces nouvelles infos !
 
Je vais bosser dessus, je posterai mon nouveau code  [:cerveau sol]

n°2307639
Lt Ripley
Ils ont tout niqué
Posté le 11-11-2017 à 22:43:02  profilanswer
 

Ça y est j'ai créé une classe interne au lieu d'un int[]
 

Code :
  1. class Lien {
  2.     int a = 0;
  3.     int b = 0;
  4.     boolean isExit = false;
  5.        
  6.     public Lien(int N1, int N2, boolean isE) {
  7.         a = N1;
  8.         b = N2;
  9.         isExit = isE
  10.     }
  11.    
  12.     public int getA () {
  13.         return a; 
  14.     }
  15.    
  16.     public int getB () {
  17.         return b; 
  18.     }
  19.    
  20.     public void setIsExit(boolean bool) {
  21.         isExit = bool
  22.     }
  23.    
  24.     public boolean getIsExit() {
  25.         return isExit;
  26.     }
  27. }


 
J'ai remplacé l'intégralité de mes Vectors par des ArrayList : Il n'y a que les .addElement() qui ne passaient plus.  Il faut utiliser .add()
 
Pour l'instant je garde mes itérations à la "i++" car je trouve plus lisible à mon oeil  (je savais qu'on pouvait itérer à la manière que tu m'as indiquée)
 
Ça marche impeccable
 
Je m'étonne moi même, j'ai mis une poignée de minutes


Message édité par Lt Ripley le 13-11-2017 à 11:47:40

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  ArrayLists de int[] dans un ArrayList...

 

Sujets relatifs
Arraylist à 2 dimension (java)Nombre aléatoire, arraylist (quizz, question)
Java ArrayList .set[Java] ArrayList
Copie d'une ArrayList d'une classe vers une autreVector et ArrayList
Générer des noms d'ArrayList dans un programmeparcours d'une arraylist
[RESOLU] Extraire un sous-type d'une arrayListArrayList qui se met à jour
Plus de sujets relatifs à : ArrayLists de int[] dans un ArrayList...


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR