Comparer deux tableaux

Fermé
sss - Modifié par sss le 22/11/2012 à 20:51
Heliotte Messages postés 1491 Date d'inscription vendredi 26 octobre 2012 Statut Membre Dernière intervention 28 janvier 2013 - 23 nov. 2012 à 07:58
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");}
   
A voir également:

2 réponses

Heliotte Messages postés 1491 Date d'inscription vendredi 26 octobre 2012 Statut Membre Dernière intervention 28 janvier 2013 92
22 nov. 2012 à 23:49
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
0
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
Modifié par KX le 23/11/2012 à 01:10
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
0
Heliotte Messages postés 1491 Date d'inscription vendredi 26 octobre 2012 Statut Membre Dernière intervention 28 janvier 2013 92
23 nov. 2012 à 07:58
Merci pour ces précisions KX
Je suis encore apprenti en JAVA
0