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

- - Dernière réponse :  Bolaaro24 - 27 sept. 2019 à 11:18
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;
}
Afficher la suite 

2 réponses

Messages postés
8694
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
12 octobre 2019
432
0
Merci
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.
Commenter la réponse de yg_be
0
Merci
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;
	}
KX
Messages postés
16033
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
6 octobre 2019
2426 -
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;
}
> KX
Messages postés
16033
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
6 octobre 2019
-
Merci.
Commenter la réponse de Bolaaro24