Fonction qui compare deux tableaux et stocke le résultat dans un troisième
AmWin67_15
Messages postés
11
Date d'inscription
Statut
Membre
Dernière intervention
-
AmWin67_15 Messages postés 11 Date d'inscription Statut Membre Dernière intervention -
AmWin67_15 Messages postés 11 Date d'inscription Statut Membre Dernière intervention -
Bonjour, je suis vraiment débutant en Java. Je dois faire un exo où une fonction compare deux tableaux String (un généré aléatoirement par l'ordi et l'autre choisi par l'utilisateur. Et chaque fois qu'elle trouve un élément identique, elle le case dans un troisième tableau lui aussi forcement String.
J'ai fait ça (je poste la main ainsi que la fonction en question, pour alléger je ne poste pas la fonction aléatoire sauf si nécessaire) :
--------------- la main
--------------- La fonction
J'ai fait ça (je poste la main ainsi que la fonction en question, pour alléger je ne poste pas la fonction aléatoire sauf si nécessaire) :
--------------- la main
import java.util.Scanner; public class Mastermind_ho { static Scanner sc = new Scanner(System.in); static String [] TAB_REF_COLORS = {"rouge","jaune","vert","bleu","orange","blanc","violet","fuchsia"}; static int NB_COLORS = 4; static int compteur=0; static String [] combination; static String [] tabJoueur; static String [] tabCorrect= {" "," "," "," "}; public static void main(String[] args) { String [] combinaisonSecrete = generateRandomCombination(); for(int i=0;i<4;i++) { System.out.print(combinaisonSecrete[i]+ "|"); } String [] combinaisonJoueur; System.out.println(); do { combinaisonJoueur = choixNumerote(); for(int i=0;i<4;i++) { System.out.print(combinaisonJoueur[i]+ "|"); } //?? }while (compteur<=12 && (12-compteur)>0); compareColor (tabJoueur, combination); for(int k=0;k<4;k++) { System.out.print(tabCorrect[k]+ "|"); } sc.close(); }
--------------- La fonction
static void compareColor (String [] tabPlayer, String [] tabOrdi) { int sizeTj = tabPlayer.length; int sizeTm = tabOrdi.length; int k=0; for (int i=0;i<sizeTj;i++) { for(int j=0; j<sizeTm; j++) { if (tabOrdi[j]==tabPlayer[i]) { System.out.print("Vous avez trouver une couleur"); tabCorrect[k]=tabOrdi[j]; k++; } else { continue; } } }
A voir également:
- Fonction qui compare deux tableaux et stocke le résultat dans un troisième
- Fonction si et - Guide
- Fusionner deux tableaux excel - Guide
- Beyond compare - Télécharger - Gestion de fichiers
- Comment faire deux colonnes indépendantes dans word - Guide
- Resultat foot - Télécharger - Vie quotidienne
3 réponses
le code complet est içi :
import java.util.Scanner; public class Mastermind_ho { static Scanner sc = new Scanner(System.in); static String [] TAB_REF_COLORS = {"rouge","jaune","vert","bleu","orange","blanc","violet","fuchsia"}; static int NB_COLORS = 4; static int compteur=0; static String [] combination; static String [] tabJoueur; static String [] tabCorrect= {" "," "," "," "}; public static void main(String[] args) { String [] combinaisonSecrete = generateRandomCombination(); for(int i=0;i<4;i++) { System.out.print(combinaisonSecrete[i]+ "|"); } String [] combinaisonJoueur; System.out.println(); do { combinaisonJoueur = choixNumerote(); for(int i=0;i<4;i++) { System.out.print(combinaisonJoueur[i]+ "|"); } //?? }while (compteur<=12 && (12-compteur)>0); compareColor (tabJoueur, combination); for(int k=0;k<4;k++) { System.out.print(tabCorrect[k]+ "|"); } sc.close(); } // Generate random combination of 4 colors static String [] generateRandomCombination() { String [] combination = new String[NB_COLORS]; int currentPosition = 0; while(currentPosition!=NB_COLORS) { int indexRandom = (int)(Math.random()*TAB_REF_COLORS.length); String color = TAB_REF_COLORS[indexRandom]; if(!isIn(color, combination)) { combination[currentPosition] = color; currentPosition++; } } return combination; } static boolean isIn(String iStringToFind, String [] iTab) { int size = iTab.length; for(int i=0;i<size;i++) { if(iStringToFind.equalsIgnoreCase(iTab[i])) return true; } return false; } // fonction pour récupérer le tableau de l'utilisateur static String [] choixNumerote() { String [] tabJoueur = new String[NB_COLORS]; for(int i=0;i<NB_COLORS;i++) { System.out.println(); System.out.println("Choisissez une couleur :"); tabJoueur[i]=sc.nextLine(); } compteur++; System.out.println("Il te reste : " + (12-compteur) + " tentative(s)"); if (compteur==12) { System.out.println("La partie est finie. Tu as perdu !"); } return tabJoueur; } // fonction pour faire la comparaison entre les 2 tableaux et stocker les élément en communs static void compareColor (String [] tabPlayer, String [] tabOrdi) { int sizeTj = tabPlayer.length; int sizeTm = tabOrdi.length; int k=0; for (int i=0;i<sizeTj;i++) { for(int j=0; j<sizeTm; j++) { if (tabOrdi[j]==tabPlayer[i]) { System.out.print("Vous avez trouver une couleur"); tabCorrect[k]=tabOrdi[j]; k++; } else { continue; } } } } }
Bonjour,
Est-ce que tu as une question ? Un problème ?
Qu'est ce que tu veux savoir ?
Est-ce que tu as une question ? Un problème ?
Qu'est ce que tu veux savoir ?
Bonjour,
en fait j'aimerais bien savoir comment mettre les éléments identiques dans un troisième tableau. L'idée est là mais le code ne tourne pas. Ma dernière fonction (compareColor) ne donne pas le résultat demandé même si j'ai réussi à supprimer les erreurs de compilation. j'arrive pas à déceler le truc !!!
Mes 3 premières fonctions marchent nickel maisla 4ème ça bloque : même si je rentre une couleur correcte ça ne m'affiche pas le message demandé par exemple. Le problème doit être vraiment dans le code même de la fonction :
(apès quelques modifs)
en fait j'aimerais bien savoir comment mettre les éléments identiques dans un troisième tableau. L'idée est là mais le code ne tourne pas. Ma dernière fonction (compareColor) ne donne pas le résultat demandé même si j'ai réussi à supprimer les erreurs de compilation. j'arrive pas à déceler le truc !!!
Mes 3 premières fonctions marchent nickel maisla 4ème ça bloque : même si je rentre une couleur correcte ça ne m'affiche pas le message demandé par exemple. Le problème doit être vraiment dans le code même de la fonction :
(apès quelques modifs)
static String [] compareColor (String [] tabPlayer, String [] tabOrdi) { String [] tabPlayer1 = new String[NB_COLORS]; String [] tabOrdi1 = new String[NB_COLORS]; //String [] tabCorrect= {" "," "," "," "}; int sizeTj = tabPlayer1.length; int sizeTm = tabOrdi1.length; int k=0; for (int i=0;i<sizeTj;i++) { for(int j=0; j<sizeTm; j++) { if (tabOrdi1[j]==tabPlayer1[i]) { System.out.print("Vous avez trouver une couleur"); tabCorrect[k]=tabOrdi1[j]; k++; } else { continue; } } } return tabCorrect; }
Bonjour,
Une autre erreur que je vois en relisant ton code, c'est que tu compares des valeurs de tabOrdi1 et tabPlayer1 mais ce sont deux tableaux vides, créés au début de la méthode, alors qu'il faudrait utiliser les tableaux tabOrdi1 et tabPlayer1, passés en paramètre.
En revanche il serait mieux que le tableau tabCorrect que retourne la méthode soit créé dans la méthode, pas en dehors (avec on ne sait quelle taille ni contenu...)
Si tu as toujours besoin d'aide, donnes moi une version plus récente de ton code, j'ai plus de temps ce week-end pour tester.
Une autre erreur que je vois en relisant ton code, c'est que tu compares des valeurs de tabOrdi1 et tabPlayer1 mais ce sont deux tableaux vides, créés au début de la méthode, alors qu'il faudrait utiliser les tableaux tabOrdi1 et tabPlayer1, passés en paramètre.
En revanche il serait mieux que le tableau tabCorrect que retourne la méthode soit créé dans la méthode, pas en dehors (avec on ne sait quelle taille ni contenu...)
Si tu as toujours besoin d'aide, donnes moi une version plus récente de ton code, j'ai plus de temps ce week-end pour tester.
Bonjour,
bonjour,
en tenant compte de tes remarques KX j'ai apporté ces modifications qui ont nettement améliorer le code. Mais il ne tourne pas comme il se doit. Merci de votre aide.
bonjour,
en tenant compte de tes remarques KX j'ai apporté ces modifications qui ont nettement améliorer le code. Mais il ne tourne pas comme il se doit. Merci de votre aide.
import java.util.Scanner;
public class Mastermind_ho {
static Scanner sc = new Scanner(System.in);
static String [] TAB_REF_COLORS = {"rouge","jaune","vert","bleu","orange","blanc","violet","fuchsia"};
static int NB_COLORS = 4;
static int ColCor=0;
static int indexCor=0;
static String [] tabPlayer = {" "," "," "," "};
static String [] combination = new String[NB_COLORS];
static String [] tabJoueur = new String[NB_COLORS];
static int compteur=0;
public static void main(String[] args) {
// appel 1ère fonction pour générer des couleurs aléatoires :
String [] combinaisonSecrete = generateRandomCombination();
for(int i=0;i<4;i++) {
System.out.print(combinaisonSecrete[i]+ "|");
}
System.out.println();
// appel 2ème fonction pour récupérer la combinaison du joueur et la comparer avec celle de l'ordi :
choixNumerote();
compareColor (tabJoueur, combinaisonSecrete);
do {
System.out.println("Il te reste : " + (12-compteur) + " tentative(s)");
System.out.println();
compteur++;
if (compteur==12) {
System.out.println("La partie est finie. Tu as perdu !");
break;
}
}while (compteur<=12 && (12-compteur)>0);
System.out.println();
// Comparaison :
String [] tabResult = compareColor (tabJoueur, combinaisonSecrete);
for(int k=0;k<4;k++) {
System.out.print(tabResult[k]+ "|");
}
System.out.println();
System.out.println("Vous avez trouver "+ ColCor+ " couleur(s) correctes");
System.out.println("Vous avez trouver "+ indexCor+ " emplacement(s) correctes");
sc.close();
}
// Generate random combination of 4 colors
static String [] generateRandomCombination() {
String [] combination = new String[NB_COLORS];
int currentPosition = 0;
while(currentPosition!=NB_COLORS) {
int indexRandom = (int)(Math.random()*TAB_REF_COLORS.length);
String color = TAB_REF_COLORS[indexRandom];
if(!isIn(color, combination)) {
combination[currentPosition] = color;
currentPosition++;
}
}
return combination;
}
static boolean isIn(String iStringToFind, String [] iTab) {
int size = iTab.length;
for(int i=0;i<size;i++) {
if(iStringToFind.equalsIgnoreCase(iTab[i])) return true;
}
return false;
}
// Collect user combination of 4 colors
static String [] choixNumerote() {
// String [] tabJoueur = new String[NB_COLORS];
for(int i=0;i<NB_COLORS;i++) {
System.out.println();
System.out.println("Choisissez une "+(i+1)+" ère couleur :");
tabJoueur[i]=sc.nextLine();
System.out.print(tabJoueur[i]+ "|");
} return tabJoueur;
}
// fonction pour faire la comparaison entre les 2 tableaux et stocker les élément en communs
static String [] compareColor (String [] tabJ, String [] comb) {
String [] tabCorrect = new String[NB_COLORS];
int sizeTj = tabJ.length;
int sizeTm = comb.length;
int k=0;
do {
for (int i=0;i<sizeTj;i++) {
for(int j=0; j<sizeTm; j++) {
if (comb[j].equals(tabJ[i]) && j==i) {
ColCor++;
indexCor++;
tabCorrect[k]=comb[j];
k++;
break;
}
else if (comb[j].equals(tabJ[i]) && j!=i) {
ColCor++;
tabCorrect[k]=comb[j];
k++;
break;
}
else {
continue;
}
}
}
} while (k<4);
return tabCorrect;
}
}
Je m'approche de la solution. Qu'est que t'en pense KX ?
import java.util.Scanner; public class Mastermind_ho { static Scanner sc = new Scanner(System.in); static String [] TAB_REF_COLORS = {"rouge","jaune","vert","bleu","orange","blanc","violet","fuchsia"}; static int NB_COLORS = 4; static int ColCor=0; static int indexCor=0; static String [] tabPlayer = {" "," "," "," "}; static String [] combination = new String[NB_COLORS]; static String [] tabJoueur = new String[NB_COLORS]; static int compteur=0; static String [] tabCorrect = {" "," "," "," "}; public static void main(String[] args) { // appel 1ère fonction pour générer des couleurs aléatoires : String [] combinaisonSecrete = generateRandomCombination(); for(int i=0;i<4;i++) { System.out.print(combinaisonSecrete[i]+ "|"); } System.out.println(); // appel 2ème fonction pour récupérer la combinaison du joueur et la comparer avec celle de l'ordi : choixNumerote(); while (compteur<=12 && (12-compteur)>0) { compareColor (tabJoueur, combinaisonSecrete); for(int x=0;x<4;x++) { System.out.print(tabCorrect[x]+ "|"); } sc.close(); } } // Generate random combination of 4 colors static String [] generateRandomCombination() { String [] combination = new String[NB_COLORS]; int currentPosition = 0; while(currentPosition!=NB_COLORS) { int indexRandom = (int)(Math.random()*TAB_REF_COLORS.length); String color = TAB_REF_COLORS[indexRandom]; if(!isIn(color, combination)) { combination[currentPosition] = color; currentPosition++; } } return combination; } static boolean isIn(String iStringToFind, String [] iTab) { int size = iTab.length; for(int i=0;i<size;i++) { if(iStringToFind.equalsIgnoreCase(iTab[i])) return true; } return false; } // Collect user combination of 4 colors static String [] choixNumerote() { // String [] tabJoueur = new String[NB_COLORS]; for(int i=0;i<NB_COLORS;i++) { System.out.println(); System.out.println("Choisissez une couleur :"); tabJoueur[i]=sc.nextLine(); } for(int k=0; k<NB_COLORS;k++) { System.out.print(tabJoueur[k]+ "|"); } return tabJoueur; } // fonction pour faire la comparaison entre les 2 tableaux et stocker les élément en communs static String [] compareColor (String [] tabJ, String [] comb) { int sizeTj = tabJ.length; int sizeTm = comb.length; int k=0; for (int i=0;i<sizeTj;i++) { for(int j=0; j<sizeTm; j++) { if (comb[j].equals(tabJ[i]) && j==i) { ColCor++; indexCor++; tabCorrect[k]=tabJ[i]; k++; break; } else if (comb[j].equals(tabJ[i]) && j!=i) { ColCor++; tabCorrect[k]=tabJ[i]; k++; break; } else { continue; } } } System.out.println("Vous avez trouver "+ ColCor+ " couleur(s) correctes"); System.out.println("Vous avez trouver "+ indexCor+ " emplacement(s) correctes"); compteur++; return tabCorrect; } }
Bonjour,
Il faut faire attention à la portée des variables, il vaut mieux les mettre au plus proche du code et donc éviter au maximum les variables static, tu devrais au contraire avoir beaucoup plus de variables locales.
Pour bien représenter ton problème je pense que ton tabCorrect ne devrait pas contenir des couleurs, mais les indications de positions "couleur bien placée", "couleur mal placée" ou "couleur invalide" qui doivent être annoncés au joueur après sa proposition.
Voici un exemple qui se base sur ce principe :
NB. Il ne faut pas faire sc.close() quand cela concerne System.in car il sera impossible de le rouvrir.
Il faut faire attention à la portée des variables, il vaut mieux les mettre au plus proche du code et donc éviter au maximum les variables static, tu devrais au contraire avoir beaucoup plus de variables locales.
Pour bien représenter ton problème je pense que ton tabCorrect ne devrait pas contenir des couleurs, mais les indications de positions "couleur bien placée", "couleur mal placée" ou "couleur invalide" qui doivent être annoncés au joueur après sa proposition.
Voici un exemple qui se base sur ce principe :
static final String OUI = "couleur bien placée"; static final String PRESQUE = "couleur mal placée"; static final String NON = "couleur invalide"; static boolean compareColor(String[] tabJ, String[] comb) { System.out.println("Essai n°" + compteur); String[] tabCorrect = new String[NB_COLORS]; for (int i = 0; i < NB_COLORS; i++) { tabCorrect[i] = NON; } // Recherche des couleurs bien placées int nbOui = 0; for (int i = 0; i < NB_COLORS; i++) { if (tabJ[i].equals(comb[i])) { tabCorrect[i] = OUI; nbOui++; } } if (nbOui == NB_COLORS) { System.out.println("Vous avez gagné en " + compteur + " essais !"); return true; // gagné } // Recherche des couleurs mal placées int nbPresque = 0; for (int i = 0; i < NB_COLORS; i++) { if (tabCorrect[i].equals(NON)) { for (int j = 0; j < NB_COLORS; j++) { if (tabCorrect[j].equals(NON) && tabJ[i].equals(comb[j])) { tabCorrect[i] = PRESQUE; nbPresque++; break; } } } System.out.println(tabJ[i] + ": " + tabCorrect[i]); } System.out.println("Vous avez trouvé " + nbOui + " couleur(s) bien placée(s)"); System.out.println("Vous avez trouvé " + nbPresque + " couleur(s) mal placée(s)"); return false; // perdu }
NB. Il ne faut pas faire sc.close() quand cela concerne System.in car il sera impossible de le rouvrir.