éviter la redondance et regrouper la resultat
Résolu
nidhalos
Messages postés
11
Date d'inscription
Statut
Membre
Dernière intervention
-
nidhalos -
nidhalos -
bonjours à tous,
je fait une comparaison entre les différentes éléments de trois matrices et je mis la résultat dans une chaîne de caractère et j'ai obtenue la résultat suivante:
en suite ,veux faire une comparaison pour chaque avec l’élimination des redondances pour obtenir la resultat suivante :
Est ce que quelqu'un pourrait m'aider svp ?
et merci
je fait une comparaison entre les différentes éléments de trois matrices et je mis la résultat dans une chaîne de caractère et j'ai obtenue la résultat suivante:
public static void coparaison() { String [][] tab1 = {{"hello","world"},{"bonjours","hey"}}; String [][] tab2 = {{"hi","hey"},{"world","test"}}; String [][] tab3 = {{"bonsoir","j"},{"test","hey"}}; String s = ""; for (int i=0; i<tab1.length; i++) { for (int w=0; w<=1; w++) { for (int j=0; j<tab2.length; j++) { for (int e=0; e<=1; e++) { if (tab1[i][w]==tab2[j][e]) { switch (w) { case (0) : if(e==0) {s = tab1[i][1]+"="+tab2[j][1]+"/ \n"+s;} if(e==1) {s = tab1[i][1]+"="+tab2[j][0]+"/ \n"+s;} break; case (1) : if(e==0) {s = tab1[i][0]+"="+tab2[j][1]+"/ \n"+s;} else if(e==1) {s = tab1[i][0]+"="+tab2[i][0]+"/ \n"+s;} break; } } }} for (int j=0; j<tab3.length; j++) { for (int e=0; e<=1; e++) { if (tab1[i][w]==tab3[j][e]) { switch (w) { case (0) : if(e==0) {s = tab1[i][1]+"="+tab3[j][1]+"/ \n"+s;} if(e==1) {s = tab1[i][1]+"="+tab3[j][0]+"/ \n"+s;} break; case (1) : if(e==0) {s = tab1[i][0]+"="+tab3[j][1]+"/ \n"+s;} else if(e==1) {s = tab1[i][0]+"="+tab3[i][0]+"/ \n"+s;} break; } } }} } } for (int i=0; i<tab2.length; i++) { for (int w=0; w<=1; w++) { for (int j=0; j<tab3.length; j++) { for (int e=0; e<=1; e++) { if (tab2[i][w]==tab3[j][e]) { switch (w) { case (0) : if(e==0) {s = tab2[i][1]+"="+tab3[j][1]+"/ \n"+s;} if(e==1) {s = tab2[i][1]+"="+tab3[j][0]+"/ \n"+s;} break; case (1) : if(e==0) {s = tab2[i][0]+"="+tab3[j][1]+"/ \n"+s;} else if(e==1) {s = tab2[i][0]+"="+tab3[i][0]+"/ \n"+s;} break; } } }} }} System.out.println(s); } }
world=hey/
hi=bonsoir/
bonjours=test/
bonjours=world/
hello=test/
en suite ,veux faire une comparaison pour chaque avec l’élimination des redondances pour obtenir la resultat suivante :
world=hey/
hi=bonsoir/
bonjours=world=test/
hello=test/
Est ce que quelqu'un pourrait m'aider svp ?
et merci
A voir également:
- éviter la redondance et regrouper la resultat
- Éviter pub youtube - Accueil - Streaming
- Resultat foot - Télécharger - Vie quotidienne
- Marques smartphone à éviter - Accueil - Guide téléphones
- Comment regrouper des applications sur android - Accueil - Guide Android
- Comment regrouper des pdf - Guide
1 réponse
Bonjour,
Déjà il ne faudrait jamais comparer deux objets avec l'opérateur
Pour comparer la valeur de deux objets, il faut utiliser la méthode equals →
Ensuite, si tu travailles avec des matrices en entrée, il serait cohérent d'avoir une matrice en sortie.
Ici tu as un String en sortie, donc forcément ça va être compliqué d'appliquer le même traitement alors que tu n'as plus de matrice à traiter...
Par contre, tu as écrit en dur des
Sur le même principe, je pense que c'est une erreur de faire un code spécifique à la comparaison de 3 matrices, tu devrais généraliser pour que ça fonctionne avec 2, 3, 4... 150 matrices.
Au final, cela reviendrait un peu à traiter non plus des
Remarque : je ne suis pas sûr que les tableaux soient les structures de données les plus pertinentes, est-ce que tu as déjà manipulé des List, Set ou Map ? Ce serait peut-être utile ici.
Et tant qu'à modifier le code, il n'y a pas de raison de se limiter à des String, tu devrais pouvoir généraliser ton programme avec tous types d'objets Java, il n'y a rien de spécifiques aux String dans ton traitement.
Pour la clarté du code maintenant, je t'invite à utiliser des noms de variables plus explicites.
Par exemple
On comprends tout de suite que
Remarque : je n'ai pas du tout compris ton calcul et ton résultat.
Si je ne regarde que la première partie avec tab1 et tab2, ça donne ceci.
tab1:
tab2 :
résultat :
Est-ce que tu pourrais expliquer à quoi correspond ce résultat ?
De plus, tu as indiqué vouloir obtenir au final "bonjours=world=test", pourquoi deux signes égal dans la même ligne ?
Déjà il ne faudrait jamais comparer deux objets avec l'opérateur
==car cela ne compare pas leur valeur mais leur référence. Ici tu es dans un cas particulier où toutes tes valeurs sont écrites en dures dans le code, donc ça marche, toutes ces String partagent la même référence, mais si tu entrais tes valeurs au clavier ça ne fonctionnerait plus.
Pour comparer la valeur de deux objets, il faut utiliser la méthode equals →
if (tab1[i][w].equals(tab2[j][e]))
Ensuite, si tu travailles avec des matrices en entrée, il serait cohérent d'avoir une matrice en sortie.
Ici tu as un String en sortie, donc forcément ça va être compliqué d'appliquer le même traitement alors que tu n'as plus de matrice à traiter...
Par contre, tu as écrit en dur des
case(0),
case(1),
if(e==0),
if(e==1),
tab1[i][0]et
tab2[j][1]mais tout ça ne fonctionnera que si tes matrices sont de tailles 2x2, dès que tu passeras à des tailles supérieures ton code ne prendra pas en compte les autres lignes et colonnes. Quand on programme, il faut toujours penser au cas général.
Sur le même principe, je pense que c'est une erreur de faire un code spécifique à la comparaison de 3 matrices, tu devrais généraliser pour que ça fonctionne avec 2, 3, 4... 150 matrices.
Au final, cela reviendrait un peu à traiter non plus des
String[][]mais des
String[][][]...
Remarque : je ne suis pas sûr que les tableaux soient les structures de données les plus pertinentes, est-ce que tu as déjà manipulé des List, Set ou Map ? Ce serait peut-être utile ici.
Et tant qu'à modifier le code, il n'y a pas de raison de se limiter à des String, tu devrais pouvoir généraliser ton programme avec tous types d'objets Java, il n'y a rien de spécifiques aux String dans ton traitement.
Pour la clarté du code maintenant, je t'invite à utiliser des noms de variables plus explicites.
Par exemple
if (tab1[row1][col1] == tab2[row2][col2])c'est mieux que ton
if (tab1[i][w] == tab2[j][e]).
On comprends tout de suite que
col1est lié aux colonnes de
tab1, c'est nettement moins évident avec
w...
Remarque : je n'ai pas du tout compris ton calcul et ton résultat.
Si je ne regarde que la première partie avec tab1 et tab2, ça donne ceci.
tab1:
hello | world |
bonjours | hey |
tab2 :
hi | hey |
world | test |
résultat :
bonjours = world |
hello = test |
Est-ce que tu pourrais expliquer à quoi correspond ce résultat ?
De plus, tu as indiqué vouloir obtenir au final "bonjours=world=test", pourquoi deux signes égal dans la même ligne ?
En effet, le résultat devrait être similaire en changeant l'ordre des tableaux, mais ce n'est pas le cas.
Ici j'inverse les deux premiers tableaux :
Juste en changeant l'ordre des tableaux dans un résultat j'ai "bonjours=world" et dans l'autre "hi=hello" ça me semble incorrect.
En reprenant ton code, cette version devrait simplifier ton programme :
1) c'est de compare chaque élément de matrice X par les autres éléments de matrice différente : et et .
2) en suit je doit parcourir et filtre le résultat obtenue de cette maniéré :
si on a cette résultat :
ab=abc
at=ar
af=abc
ac=mj
...
elle doive être comme sa:
ab=abc=af ( une seul abc :et jointure les deux ligne dans un seul ligne)
at=ar
ac=mj
...
j'ai déjà résoudre la problème 1 : comparaison matrice mais je trouver une difficulté dans la partie filtrage
réellement cette une petite d'un algorithme plus complexe ;
oui je obligé de faire une truc pour filtre la résultat de comparaison ( votre solution de comparaison est parfait merci bien )
mes matrices sont de taille [..][1] et j' ai été oblige de faire une truc pour filtres la résultat de comparaison .
pour la signe "=" je suis oblige de faire deux signes dans la cas "bonjours=world=test" : si et seulement si :j'ai ( j'ai une chaîne de caractère en commun dans deux lignes différant :
bonjours=word
word=test
ou bien
bonjours = test
test = word
ou bien
bonjours = test
bonjours = word
( selon mes matrices j'ai pas le cas de trouver une string dans plus que deux lignes différentes ( max 2) )