Comparer deux tableaux

Bonjour,

je compare deux tableaux p et f
si une case de p se trouve dans f alors la variable exist recoit true sinon elle reste faux .
le probleme que ce code ne fonctionne pas il me renvoi toujours faux

boolean  compare (Vector premisses,Vector faits)  
{boolean existe=false; 
     
        int i=0; 
            int j=0; 
   while  ( j<faits.size() &&  i<premisses.size() ) 
 { 
     if( premisses.elementAt(i).equals(faits.elementAt(j))) 
     { i++; 
  
 existe=true; 
     break;} 
        
         
        else  
        j++; 
        }    
     
    return(existe); 
} 


dans le main :

boolean exist=v.compare(p,f);
        if (exist)
        {System.out.println("regle declenchable");}
        else
            System.out.println("regle non declenchable");}
   

2 réponses

  • Votes
  • Date
  • Date décroissante
  1. le principe de comparaison est, à mon avis, incorrect.
    Algorithme:
    Admettons tableaux t1{1, 2, 3} et t2{3, 4, 5}
    POUR i = 0; i<TAILLE(t1) ; i++
    ..POUR j = 0; j<TAILLE(t2) ; j++
    ....SI t1(i) == t2(j) ALORS
    ......existe=VRAI;
    ....FIN SI
    ..FIN j
    FIN i
    1. Modérateur
      Tout simplement avec deux boucles for each :

      public static boolean compare(Collection c1, Collection c2) 
      { 
          for (Object o1 : c1) // Pour chaque objet de c1 
          for (Object o2 : c2) // Pour chaque objet de c2 
              if ((o1==null && o2 ==null) || (o1!=null && o1.equals(o2)) 
                  return true; 
          return false; 
      }

      Remarque : j'ai mis Collection, parce que c'est plus général que Vector, ça permettra par exemple de comparer aussi un Vector avec des List, etc.

      En toute rigueur, on devrait quand même imposer que les deux Collection aient le même type de donnée, ce qui donne une formulation paramétrée :

      public static <E> boolean compare(Collection<E> c1, Collection<E> c2) 
      { 
          for (E e1 : c1) 
          for (E e2 : c2) 
              if ((e1==null && e2 ==null) || (e1!=null && e1.equals(e2)) 
                  return true; 
          return false; 
      }
      La confiance n'exclut pas le contrôle
      1. Merci pour ces précisions KX
        Je suis encore apprenti en JAVA