Compare le contenu de 2 tableaux sans tenir compte de l'ordre

Résolu/Fermé
Bolaaro24 - 14 sept. 2019 à 21:35
 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;
}
A voir également:

2 réponses

yg_be Messages postés 22717 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 22 avril 2024 1 474
Modifié le 15 sept. 2019 à 12:09
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.
0
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;
	}
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
26 sept. 2019 à 21:29
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;
}
0
Bolaaro24 > KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024
27 sept. 2019 à 11:18
Merci.
0