Bonjour à tous,

Me voici en train de coder un mastermind, tout était impec, jusqu'à la fonction qui est censée donner le nombre de pions de bonnes couleurs et le nombre de pions bien placés. Je pense que c'est plus un problème algorithmique qu'un problème propre au java, mais j'aimerai bien savoir pourquoi ceci ne marche pas (je précise que dans la combinaison secrète (var csecrete) et dans la combinaison saisie par le joueur (var cjoueur) il peut y avoir plusieurs fois la même couleur (d'où mon problème)):

Je pense que ça vient des lignes 35 à 47.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
 
public class Test2 {
 
 
	public static void main(String[] args) {
		String[] a={"a", "b", "c", "d"};
		String[] b={"c", "a", "a", "a"};
 
		float[] d = positionnement(a,b);
 
		System.out.println("bien placés =   " + d[0]);
		System.out.println("bonne couleur = "+d[1]);
	}
 
 
	/*
	 * Methode censée donner le nombre de pion bien placé et le nombre de pion de la bonne couleur
	 * @param String[] cjoueur
	 * @param String[] csecrete
	 * @return float[nbeBienPlace, nbBonneCouleur]
	 */
	public static float[] positionnement(String[]cjoueur, String[] csecrete){
		float nbBienPlace = 0;
		float nbBonneCouleur = 0;
		for(int i = 0; i<cjoueur.length; i++){
			if(nbreFoisCouleurDansListe(cjoueur[i], csecrete) == 1){
				if(bienPlace(cjoueur[i], i, csecrete)){
					nbBienPlace++;
					nbBonneCouleur++;
				}
				else if(bonneCouleur(cjoueur[i], csecrete)){
					nbBonneCouleur++;
				}
			}
			else if(nbreFoisCouleurDansListe(cjoueur[i], csecrete) == 2){
				if(bienPlace(cjoueur[i], i, csecrete)){
					nbBienPlace++;
					nbBonneCouleur = nbBonneCouleur+(float)1/2;
				}
				else if(bonneCouleur(cjoueur[i], csecrete)){
					nbBonneCouleur = nbBonneCouleur+(float)1/2;
				}
			}
			else if(nbreFoisCouleurDansListe(cjoueur[i], csecrete) == 3){
				if(bienPlace(cjoueur[i], i, csecrete)){
					nbBienPlace++;
					nbBonneCouleur = nbBonneCouleur+(float)1/3 ;
				}
				else if(bonneCouleur(cjoueur[i], csecrete)){
					nbBonneCouleur = nbBonneCouleur+(float)1/3;
				}
			}
			else if(nbreFoisCouleurDansListe(cjoueur[i], csecrete) == 4){
				if(bienPlace(cjoueur[i], i, csecrete)){
					nbBienPlace++;
					nbBonneCouleur = 1;
				}
				else if(bonneCouleur(cjoueur[i], csecrete)){
					nbBonneCouleur = 1;
				}
			}
		}
 
 
		float[] nbre = {nbBienPlace, nbBonneCouleur};
		return nbre;
	}
 
/*
	 * Methode comptant le nombre de fois qu'une string apparait dans une liste de String
	 * @param String str
	 * @param String[] cjoueur
	 * @return int nbe
	 */
	public static int nbreFoisCouleurDansListe(String str, String[] cjoueur){
		int nbe=0;
		for(int i=0; i<cjoueur.length; i++){
				if(cjoueur[i].equals(str)){
					nbe++;
				}
		}
		return nbe;
 
 
	}
 
	/*
	 * Methode testant si un pion est bien Place
	 * @param String Couleur
	 * @param int j (position du pion dans la cjoueur)
	 * @param String[] csecrete
	 * @return boolean bienPlace
	 */
	public static boolean bienPlace(String couleur, int j, String[] csecrete){
		boolean bienPlace = false;
		for(int i=0; i<csecrete.length; i++){
			if(couleur.equals(csecrete[i]) && i == j){
					bienPlace = true;
			}
		}
		return bienPlace;
	}
 
 
	/*
	 * Methode testant si la couleur du pion est présente dans la combi secrete
	 * @param String Couleur
	 * @param String[] csecrete
	 * @return boolean bonneCouleur
	 */
	public static boolean bonneCouleur(String couleur, String[]csecrete){
		boolean bonneCouleur = false;
		for(int i=0; i<csecrete.length; i++){	
			if(couleur.equals(csecrete[i])){
				bonneCouleur = true;
			}
		}
		return bonneCouleur;
	}
}
Merci d'avance pour votre aide.

PS: c'est la variable nbeBonneCouleur qui merde, nbeBienPlace marche nickel!