Partage
  • Partager sur Facebook
  • Partager sur Twitter

Erreurs sur ArrayList

Algo de sudoku

    11 octobre 2008 à 18:28:35

    Bonsoir à tous,

    Je souhaite créer des ArrayList d'ArrayList d'Integer.(Ouf! :) )
    Eclipse met des warnings sur les lignes

    listeDesLignes.get(i).add(tmp);
    listeDesColonnes.get(i).add(tmp2);
    listeDesCarres.get(j).add((tab[k][l]));



    du code ci-dessous avec le message suivant :
    "Type safety: The method add(Object) belongs to the raw type ArrayList.
    References to generic type ArrayList<E> should be parameterized"

    J'ai cherché et je sais qu'il s'agit d'une erreur relative à la généricité de java 1.5,cependant il me semble avoir fait les choses dans les règles de l'art!

    Merci d'avance!

    A là compilation,j'ai les erreurs suivantes
    Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 3, Size: 2
    at java.util.ArrayList.rangeCheck(ArrayList.java:571)
    at java.util.ArrayList.get(ArrayList.java:349)
    at algorithmique.VerificationGrille.grilleOk(VerificationGrille.java:37)
    at algorithmique.VerificationGrille.main(VerificationGrille.java:87)




    package algorithmique;
    import java.util.*;
    
    
    public  class VerificationGrille {
    
    	public  boolean grilleOk(int tab[][]){
    		
    		//Déclaration des listes de listes de lignes,colonnes et carrés de la grille
    		
    		List <ArrayList> listeDesLignes = new ArrayList<ArrayList>();
    		List <ArrayList> listeDesColonnes = new ArrayList<ArrayList>();
    		List<ArrayList> listeDesCarres = new ArrayList<ArrayList>();
    		
    		for(int i = 0;i<tab.length;i++){
    			 listeDesLignes.add(new  ArrayList<Integer>()  );
    			 listeDesColonnes.add(new  ArrayList<Integer>() );
    			 for(int j=0;j<tab.length;j++){
    				 Integer tmp = (Integer)(tab[i][j]);
    				 Integer tmp2 = (Integer)(tab[j][i]);
    				<souligne> listeDesLignes.get(i).add(tmp);
    				  listeDesColonnes.get(i).add(tmp2);
    				 </souligne>
    				 
    			 }
    			
    			
    		}
    		
    		//Remplissage des listes de liste des Carrés constituant la grille
    			
    		for(int i =0;i<tab.length;i+=Math.sqrt(tab.length)){
    			for (int j = 0;j<tab.length;j+=Math.sqrt(tab.length)){
    				listeDesCarres.add(new ArrayList<ArrayList>());
    				for (int k =0;k<Math.sqrt(tab.length);k++){
    					for (int l =0;l<Math.sqrt(tab.length);l++){
    					
    						<souligne>listeDesCarres.get(j).add((tab[k][l]));</souligne>
    					}
    				}
    				
    				
    			
    			}
    		}
    		//Vérifier pour toutes les listes de listes si elles ne contiennent pas de doublons
    		
    		for(int i=0;i<tab.length;i++){
    		if((!estSansDoublon(listeDesLignes.get(i))||(!estSansDoublon(listeDesColonnes.get(i)))||(!estSansDoublon(listeDesCarres.get(i))))){
    			return false;
    			
    		}
    			
    			
    		
    		
    		}
    		return true;
    	}
    	
    	public  boolean estSansDoublon(ArrayList liste){
    		for(int i =0;i<liste.size();i++){
    			for(int j =0;j<liste.size();j++){
    				
    				if(liste.get(i).equals(liste.get(j))&&i!=j){
    					return false;
    					
    				}
    			}
    			
    		}
    		
    		return true;
    	}
    	
    	public static void main(String[] args) {
    		
    		int tab[][] = new int[9][9];
    
    		for(int i =0;i<9;i++){
    			for(int j =0;j<9;j++){
    			tab[i][j]=0;	
    			}
    			
    			
    		}
    		VerificationGrille essai = new VerificationGrille();
    		essai.grilleOk(tab);
    		
    
    	}
    
    }
    
    • Partager sur Facebook
    • Partager sur Twitter
      11 octobre 2008 à 19:59:46

      Bonsoir, j'ai pas eu le courage de chercher tes erreurs par contre pour ce qui en est des warning c'est tout simplement car tu utilise :

      List <ArrayList> listeDesLignes = new ArrayList<ArrayList>();
      


      au lieu de :

      List <ArrayList<Integer>> listeDesLignes = new ArrayList<ArrayList<Integer>>();
      


      tu dois préciser ce qui est dans une collection.
      D'ailleurs cela te permettra de passer de :
      Integer tmp = (Integer)(tab[i][j]);
      


      à :

      Integer tmp = tab[i][j];
      


      Car Java saura que ce qui se trouve dans ta collection est un Integer ;)
      • Partager sur Facebook
      • Partager sur Twitter
        12 octobre 2008 à 15:44:49

        Merci pour cette correction, je n'ai plus de warnings sur le code,malheureusement toujours les erreurs de compilations.
        Au boulot!
        • Partager sur Facebook
        • Partager sur Twitter
          12 octobre 2008 à 16:25:08

          tu veux plutôt dire à l'exécution.

          regarde à la ligne 37. tu fais get(j)
          or j est incrémenté de Math.sqrt(tab.length) et non de 1, donc à la deuxième itération de la boucle j==3, or tu n'a que deux éléments dans ton ArrayList

          voila la correction
          listeDesCarres.get((int)(j/Math.sqrt(tab.length))).add((tab[k][l]));

          Sinon j'espère que le au boulot était un raccourci pour "merci de bien vouloir jeter un oeil". rappelle toi que des gens vont prendre de leur temps libre par gentillesse (...ou pas) pour essayer de t'aider et évite se genre de chose.
          • Partager sur Facebook
          • Partager sur Twitter
            14 octobre 2008 à 20:25:21

            Merci pour ta réponse , mais que les choses soient bien claires le "au boulot" n'était destiné qu'à moi même!!!Je ne me permettrai pas ça!Ca fait quand même un peu gros!
            • Partager sur Facebook
            • Partager sur Twitter
              15 octobre 2008 à 15:16:02

              excuse ma méprise alors ;)

              sinon ton problème est bien réglé ? si oui met le sujet en résolu
              • Partager sur Facebook
              • Partager sur Twitter
                15 octobre 2008 à 18:23:51

                Pas de soucis.
                Non mon problème n'est pas tout à fait réglé,je posterai quand celà sera compéletement résolu et je l'indiquerai.La solution pourra peut-être servir à d'autres dans ce cas
                • Partager sur Facebook
                • Partager sur Twitter

                Erreurs sur ArrayList

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown