Compare le contenu de 2 tableaux sans tenir compte de l'ordre [Résolu]

Signaler
-
 Bolaaro24 -
Bonjour,
Je suis debutant en java et j'ai un devoir dont l'objectif est de créer un code qui Compare le contenu de 2 tableaux sans tenir compte de l'ordre. Retourner "true" si les 2 tableaux contiennent les mêmes éléments avec les mêmes nombres d'occurrence (pas forcément dans le meme ordre).
J'ai écrit le code ci-dessous mais ça ne marche pas.
Merci d'avance pour votre aide

public static boolean similaires(final int[] tab1,final int[] tab2) {     
		  boolean resultat=true;
		  int nb1=0; int nb2=0;
			 if (tab1==null || tab2==null || tab1.length!=tab2.length) {
				 resultat=false;}
			 else {
			int i=0;
			while (resultat = true && i<tab1.length) {
				  int j=0; int k=0;
				  while(j<tab1.length) {
					  if (tab1[i]==tab1[j]){
					  nb1++;
					  j++;}
					  else { j++;
					  }
					  }
				  while(k<tab2.length && tab2[k]!=tab1[i]) {
					k++;
				   }
						int m=0;
						while (m<tab2.length) {
							if(tab2[k]==tab2[m]) {
							nb2++;
							m++;
							} else {
								m++;
							}
						}
				   if(nb1==nb2) {
					   resultat=true;
					   }
					   else {
						   resultat=false;
					   }
				   i++;
			  }
		  }
			 return resultat;
}

2 réponses

Messages postés
11807
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
14 août 2020
674
bonjour, "ça ne marche pas", que se passe-t'il en réalité?
la ligne 30 me semble inutile et la ligne 8 me semble suspecte.
je te suggère d'utiliser des boucles for en remplacement de certaines boucles while, c'est beaucoup plus clair.
je te suggère aussi d'expliquer ce que tu penses que fait ton programme, comment tu as choisi de résoudre cet exercice.
la ligne 20 pourrait être modifiée pour réduire la quantité de travail.
réfléchis à ton utilisation des variables nb1 et nb2.
Bonjour yg_be. Merci pour ta reponse.
Tes remarques m'ont permis de revoir le code. Il marche maintenant.
Je le mets ici pour ceux qui en auront besoin
/**                                                                              
	   * Compare le contenu de 2 tableaux sans tenir compte de l'ordre.                 
	   * @return true si les 2 tableaux contiennent les mêmes éléments                  
	   * *         avec les mêmes nombres d'occurrence                                    
	   * *         (pas forcément dans le meme ordre).                                    
	   * **/   
	  public static boolean similaires(final int[] tab1,final int[] tab2) {     
		  boolean resultat;
		  int nb1=0; int nb2=0;
			 if (tab1==null || tab2==null || tab1.length!=tab2.length) {
				 resultat=false;}
			 else {
			int i=0;
			while (i<tab1.length && nb1==nb2) {
				  int k=0;
				  for (int j=0;j<tab1.length;j++) {
					  if (tab1[i]==tab1[j]){
					  nb1++;
					  }
				  }
				   while(k<tab2.length && tab2[k]!=tab1[i]) {
					k++;
				   }
						for (int m=0;m<tab2.length;m++) {
							if(tab2[k]==tab2[m]) {
							nb2++;
							}
						}
					    i++;
			  }
			if (i>=tab1.length) {
				   resultat=true;
			   }
			   else {
				   resultat=false;
			   }
			 }
			 return resultat;
	}
Messages postés
15987
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
12 août 2020
2 652
Pour ceux que ce problème intéresserait je propose également ce corrigé :

public static boolean similaires(int[] tab1, int[] tab2) {
    if (tab1 == null || tab2 == null || tab1.length != tab2.length)
        return false;
    for (int n : tab1) {
        if (nbOccurences(tab1, n) != nbOccurences(tab2, n))
            return false;
    }
    return true;
}

private static int nbOccurences(int[] tab, int value) {
    int result = 0;
    for (int n : tab) {
        if (n == value)
            result++;
    }
    return result;
}
>
Messages postés
15987
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
12 août 2020

Merci.