IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

avec Java Discussion :

fonction non detectée par le main


Sujet :

avec Java

  1. #1
    Membre du Club Avatar de arwin
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 59
    Points : 42
    Points
    42
    Par défaut fonction non detectée par le main
    j'ai mon main qui appelle une fonction. J'ai écris ma fonction en dehors de la main. Apparemment il n'y a pas d'erreur de compilation mais ma fonction n'est pas appelé. Voici le code et merci d'avance pour votre aide :

    Voici le main :

    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
    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 [] 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);
    						sc.close();
    				}
    Et voici la fonction :
    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
    static void compareColor (String [] tabJoueur, String [] tabMachine) {
     
    int sizeTj = tabJoueur.length;
    int sizeTm = tabMachine.length;
    int i=0, j=0, k=0;						
    		for (i=0;i<sizeTj;i++) {
    			for(j=0; j<sizeTm; j++) {
    				if (tabMachine[j]==tabJoueur[i]) {
    				System.out.print("Vous avez trouver une couleur");
    				tabCorrect[k]=tabMachine[j];
    				System.out.println(tabCorrect[k]);
    			}
    			else {
    				continue;
    				}
    			}
    	}
    }

  2. #2
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 854
    Points
    22 854
    Billets dans le blog
    51
    Par défaut
    Ben si ta méthode n'est jamais invoquée, c'est que tu l'invoques jamais.
    CQDF
    Circulez y a rien a voir.

    Conseil pertinent chaudement recommandé : relire le code, placer un breakpoint et faire tourner le programme dans un débogueur.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  3. #3
    Membre du Club Avatar de arwin
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 59
    Points : 42
    Points
    42
    Par défaut
    désolé, j'ai posté la mauvaise main. En fait je l'appelle mais ça marche pas :

    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
    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 (combinaisonJoueur, combinaisonSecrete);
     
    		sc.close();
    				}

  4. #4
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 854
    Points
    22 854
    Billets dans le blog
    51
    Par défaut
    Citation Envoyé par bouye Voir le message
    Conseil pertinent chaudement recommandé : relire le code, placer un breakpoint et faire tourner le programme dans un débogueur.
    Et , euh, tu espères que les conditions requises pour sortir de la boucle soient vérifiées un jour ?
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  5. #5
    Membre du Club Avatar de arwin
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 59
    Points : 42
    Points
    42
    Par défaut
    je ne comprend pas bien ta question Bouye.
    avec ce code je rentre mes couleurs et ça s’arrête au bout de 12 tentatives. Je ne pense pas qu'il s'agit d'une boucle sans fin.
    J'ai changé la fonction pour qu'elle retourne un tableau de String. Mais c'est toujours pareil. La main la zappe.

    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
        static String compareColor (String [] tabJoueur, String [] tabMachine) {
     
            int sizeTj = tabJoueur.length;
            int sizeTm = tabMachine.length;
            int i=0, j=0, k=0;						
                    for (i=0;i<sizeTj;i++) {
                        for(j=0; j<sizeTm; j++) {
                            if (tabMachine[j]==tabJoueur[i]) {
                            System.out.print("Vous avez trouver une couleur");
                            tabCorrect[k]=tabMachine[j];
                            System.out.println(tabCorrect[k]);
                        }
                        else {
                            continue;
                            }
                        }
                }
                    return tabCorrect[k];
            }

  6. #6
    Membre du Club Avatar de arwin
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 59
    Points : 42
    Points
    42
    Par défaut
    En fait, et j'en suis désolé, je n'ai pas bien expliqué le contexte. En fait il s'agit d'une fonction qui compare deux tableaux String (un généré alétoirement 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.
    Merci

  7. #7
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    C'est toujours mieux d'expliquer les choses, mais le problème c'est que ça, ça aurait dû être évident parce qu'on l'aurait vu tout de suite avec ton code.
    Et pourquoi on l'a pas vu tout de suite et tu t'es dit qu'il fallait expliquer des choses ?

    C'est parce que tu ne montres pas ton code.

    Alors arrête de nous dire que tu as changé cette méthode ou ce machin, qu'une boucle n'est pas infinie ou que quelque chose n'est pas détecté.

    Prouve-le, ne le dis pas. Montre ton code, tout ton code entier, tel qu'il est vraiment, maintenant, sans aucune modification.

    Et ne nous dis pas si des choses sont détectées ou non. Ça n'existe pas la détection. Dis nous ce qui se passe exactement, et rien d'autre que ce qui se passe exactement. Ce que tu tapes au clavier, ce que tu vois à l'écran. Pas des histoires imaginaires de détection.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #8
    Membre du Club Avatar de arwin
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 59
    Points : 42
    Points
    42
    Par défaut
    Je suis vraiment désolé, c'était pas du tout mon intention. Voici tout le code, avec le message d'erreur suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    in thread "main" java.lang.NullPointerException
    	at Mastermind_ho.compareColor(Mastermind_ho.java:80)
    	at Mastermind_ho.main(Mastermind_ho.java:31))

    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
    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;
                            }
                        }
                }
     
            }
    }

  9. #9
    Membre habitué Avatar de Badshade23
    Homme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2014
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Décembre 2014
    Messages : 203
    Points : 133
    Points
    133
    Par défaut
    Salut,

    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
     
    	// 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;
    				}
    			}
    		}
    	}
    Tu utilises le "==" pour comparer deux String ? Il faut plutôt utiliser le .equals pour comparer deux String ce sont des objets et non des types primitifs tu compares leurs adresses mémoire là.
    Ensuite dans ta condition de sortie de ta boucle while n'est pas bonne. Tu ne testes pas si la combinaison du joueur est bonne... Tu lui fais répéter la saisie même s'il a trouvé ... Ta seule condition de sortie est le compteur ce qui n'est pas bon.
    Dans ta méthode compareColor tu donnes en paramètre une variable "combination" qui n'est jamais instanciée ... qui déclenche un java.lang.NullPointerException. (comme le paramètre tabJoueur d’ailleurs).
    Je pense qu'il faut que tu revoies tout ton code. Traite déjà les remarques soulevées. Et si tu restes encore bloqué je t'aiderais encore. Mais je pense que tu veux faire ton code tout seul sans que l'on te donne la réponse non ?
    S'il y a des choses que tu n'as pas comprises n'hésites pas. (J'ai surement pas relever tout les problèmes mais je pense que c'est un bon début).

  10. #10
    Membre du Club Avatar de arwin
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 59
    Points : 42
    Points
    42
    Par défaut
    Merci Badshade23, effectivement il y a beaucoup à corriger mais vraiment je suis débutant de chez débutant ... cette année on a fait du java mais on n'a fait qu'effleurer les objets et les strings. Je vais voir comment régler déjà les points que tu as soulevé et surement je reviendrais vers toi. Vraiment merci beaucoup.

  11. #11
    Membre du Club Avatar de arwin
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 59
    Points : 42
    Points
    42
    Par défaut améliorations apportées
    bonjour,
    en tenant compte des remarques de Badshade23 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.

    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
    import java.util.Scanner;
    //import java.util.ArrayList;
     
    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);
    						System.out.println();
    						do {
    			    		System.out.println("Il te reste : " + (11-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();
     
    				}
     
        // 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) {
     
        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; 
        } 
    }

  12. #12
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Hello,

    une chose à la fois. Décris ce qui ne te plaît pas.

    ... Il me semble que j'ai déjà dit ça, d'ailleurs...
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  13. #13
    Membre du Club Avatar de arwin
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 59
    Points : 42
    Points
    42
    Par défaut
    Je m'approche de la solution, enfin .. j'espère
    Qu'est ce que t'en pense Badshade23 ?


    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
     
    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; 
        } 
    }

  14. #14
    Membre habitué Avatar de Badshade23
    Homme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2014
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Décembre 2014
    Messages : 203
    Points : 133
    Points
    133
    Par défaut
    Citation Envoyé par arwin Voir le message
    Merci Badshade23, effectivement il y a beaucoup à corriger mais vraiment je suis débutant de chez débutant ... cette année on a fait du java mais on n'a fait qu'effleurer les objets et les strings. Je vais voir comment régler déjà les points que tu as soulevé et surement je reviendrais vers toi. Vraiment merci beaucoup.
    Salut,
    t’inquiète on a tous débuté à un moment ou à un autre moi le premier et je suis encore très loin d'être un spécialiste en JAVA. Si tu t'en donnes les moyens tu réussiras comme tout le monde .
    Alors pour ton code :
    J'ai vu que tu as mis le mot clef static de partout sais-tu son utilité ? Il ne doit pas être utilisé à outrance sinon ta mémoire va se surcharger pour rien.
    En java je te conseille d'indiquer toujours la visibilité de tes variables (private, protected, package ou encore public). Je te laisse regarder leurs significations sur Internet, tu trouveras sans problème.
    A savoir que si tu renseignes rien il est automatiquement m'y en package. Personnellement et de ce que l'on m'a appris une classe et TOUJOURS responsable de ses variables. Elles doivent donc être déclarées en private de base. Si tu en as besoin ailleurs tu utiliseras à ce moment là les accesseurs et les mutateurs de la classe (Get/Set).
    Ensuite pour les variables qui ne changent jamais, on appelle ça des constantes et il y a quelques règles à respecter :
    Elles doivent être en final (ça veut dire que la variable ne changera plus après son instanciation).
    Elles peuvent/doivent être en static.
    Elles s'écrivent toujours en MAJ.
    Exemple avec ton tableau de couleur "TAB_REF_COLORS" celui-ci ne change jamais, tu peux donc l'écrire : private static final String [] TAB_REF_COLORS. Comme pour NB_COLORS etc.....
    Dans ton code, certaines variables ne sont pas utilisées ( tabPlayer, combination). Je te conseille très vivement de supprimer tout le temps les variables inutilisées. C'est du code mort, parasite qui prend de la place et qui peux t'induire en erreur. En gros rien de bon ! Ton IDE et là pour te faciliter la tache et normalement t'indique ce genre d'erreur via des warning ou error.
    L'utilisation d'un "System.out.println();" pour un retour chariot n'est pas bon, tu peux utiliser le "\n" qui fera le même travail et ça sera largement plus propre.
    Pour les méthodes, tu dois indiquer aussi si public, private .... Bien plus propre !
    La javadoc (Pour expliquer le fonctionnement des méthodes par exemple) se fait avec /** Méthode qui .... */ plus propre aussi qu'un simple commentaire .
    Ensuite, ton code ne fonctionne pas ^^.
    Ta boucle while doit contenir la saisie des nombres ainsi que la vérification de ceux-ci. Si les nombres sont bons, tu sors de la boucle. Si un ou plusieurs sont bons, mais pas tous, tu ne sors pas de la boucle et tu indiques au joueur lequel(s) sont bon. Si le joueur n'a toujours pas trouvé la combinaison après le nombre d'essais autoriser alors là, il a perdu.
    Voici ton code un peut avancer, mais avec encore des erreurs :
    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
    121
    122
     
    import java.util.Scanner;
     
    /**
     * Class qui ....
     * @author XXX
     *
     */
    public class MastermindHo {
     
    	private static Scanner sc = new Scanner(System.in);
    	private static String[] TAB_REF_COLORS = { "rouge", "jaune", "vert", "bleu", "orange", "blanc", "violet",
    			"fuchsia" };
    	private static int NB_COLORS = 4;
    	private static int ColCor = 0;
    	private static int indexCor = 0;
    	private static String[] tabPlayer = { " ", " ", " ", " " };
    	private static String[] combination = new String[NB_COLORS];
    	private static String[] tabJoueur = new String[NB_COLORS];
    	private static int compteur = 0;
    	private 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] + "|");
    		}
     
    		while (compteur <= 12 && (12 - compteur) > 0) {
    			// appel 2ème fonction pour récupérer la combinaison du joueur et la comparer
    			// avec celle de l'ordi :
    			choixNumerote();
    			compareColor(tabJoueur, combinaisonSecrete);
    			for (int x = 0; x < 4; x++) {
    				System.out.print(tabCorrect[x] + "|");
    			}
    			sc.close();
    		}
    	}
     
    	/**
             *  Generate random combination of 4 colors
             * @return
             */
    	private 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;
    	}
     
    	/**
             * 
             * @param iStringToFind
             * @param iTab
             * @return
             */
    	private 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
             * @return
             */
    	private static String[] choixNumerote() {
    		for (int i = 0; i < NB_COLORS; i++) {
    			System.out.println("\nChoisissez 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.
             * @param tabJ
             * @param comb
             * @return
             */
    	private static String[] compareColor(String[] tabJ, String[] comb) {
    		int k = 0;
    		for (int i = 0; i < tabJ.length; i++) {
    			for (int j = 0; j < comb.length; 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;
    	}
    }
    Dit moi s'il y a des choses que tu ne comprends pas.
    Mais je ne te donnerai pas la réponse tout faite ce n'est pas le but, il faut essayer et persévérait pour avancer mais je t'aiderai du mieux que je puisse jusqu'à ce que tu es un résultat convenable.
    Reprends tout ce que j'ai dit puis continue à améliorer le code et poste le, une fois fais.
    Bon courage, tu as encore du boulot

  15. #15
    Membre du Club Avatar de arwin
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 59
    Points : 42
    Points
    42
    Par défaut
    Super ! merci beaucoup Badshade23 .. je vais voir ça ce soir ... je suis en plein période d'examen
    Tu es vraiment très pédagogue merci beaucoup.

  16. #16
    Membre du Club Avatar de arwin
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 59
    Points : 42
    Points
    42
    Par défaut
    salut,
    voilà voilou, je pense qu'enfin j'ai réussi ... il reste surement des affinements à apporter.


    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
    import java.util.Scanner;
    public class Mastermind_ho {
     
    static Scanner sc = new Scanner(System.in);
    private static final String [] TAB_REF_COLORS = {"rouge","jaune","vert","bleu","orange","blanc","violet","fuchsia"};
    private static final int NB_COLORS = 4;
    private static int ColCor=0;
    private static int indexCor=0;
    private static String [] tabJoueur = new String[NB_COLORS];
    private static int compteur=0; 
    private 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]+ "|");
    						}
     
    				// appel 2ème fonction pour récupérer la combinaison du joueur et la comparer avec celle de l'ordi : 
    						while (compteur<=12 && (12-compteur)>0) {	
    						choixNumerote(); //pourquoi rentrer la fonction dans la boucle while ?
    						compareColor (tabJoueur, combinaisonSecrete);
    						for(int x=0;x<4;x++) {
    			            	System.out.print(tabCorrect[x]+ "|");
    			            }
     
    			    		if (ColCor==NB_COLORS && indexCor==NB_COLORS){
    			 	    		System.out.println("\nBravo ! Tu as gagné !");
    			 	        	}
    			    		else {
    				         System.out.println("\nVous avez trouver "+ ColCor+ " couleur(s) correctes");
    				         System.out.println("\nVous avez trouver "+ indexCor+ " emplacement(s) correctes");
    				         System.out.println("\nIl te reste : " + (12-compteur) + " tentative(s)");
    			         }
    			    		if (compteur==12) 
    			    		System.out.println("\nLa partie est finie. Tu as perdu !");
     
     
    					}
    						sc.close();
    				}
     
        // Generate random combination of 4 colors 
    	private 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;
        }
     
    	private 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 
    	private static String [] choixNumerote() {
        // String [] tabJoueur = new String[NB_COLORS];
        	for(int i=0;i<NB_COLORS;i++) {
                System.out.println();
                System.out.println("\nChoisissez 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
     
    	private static String []  compareColor (String [] tabJ, String [] comb) {
            int k=0;	
           	for (int i=0;i<tabJ.length;i++) {
    	        for(int j=0; j<comb.length; 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;
    	                        }
    	                 }
    } 
     
     
            compteur++;
            return tabCorrect;
        } 
    }

  17. #17
    Membre habitué Avatar de Badshade23
    Homme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2014
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Décembre 2014
    Messages : 203
    Points : 133
    Points
    133
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    choixNumerote(); //pourquoi rentrer la fonction dans la boucle while ?
    Car ta boucle est le nombre d'essais que le joueur a. Si tu ne le mets pas dans la boucle il pourra choisir qu'une seule fois ses couleurs et tu vas tester celle-ci 12 fois. On sera d'accord que ce n'est pas le but .

    Si on parle que du fonctionnement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    if (ColCor == NB_COLORS && indexCor == NB_COLORS) {
    	System.out.println("\nBravo ! Tu as gagné !");
    }
    L'idée est là mais une fois qu'il a gagné, il se passe quoi ? il peut rejouer ? La partie se termine ? Car là on reste dans ta boucle ce qui n'est pas bon. Soit tu sors (en remplissant la condition de sortie de boucle ou avec un return) soit tu relances tout le jeux.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    else {
    	System.out.println("\nVous avez trouver " + ColCor + " couleur(s) correctes");
            System.out.println("\nVous avez trouver " + indexCor + " emplacement(s) correctes");
           System.out.println("\nIl te reste : " + (12 - compteur) + " tentative(s)");
    }
    Un bon début aussi mais ça pourrait être amélioré (Quelles couleurs sont bonnes ? Sont-elles bien placées ? etc...) après cela dépend de ton énoncé et de ce que tu désires faire .

    Sans regarder la qualité de ton code tu as quasiment réussi à faire ce que tu voulais et bravo . Après prend en compte mes remarques, fait quelque chose de plus "ludique" pour le joueur et si tu veux améliorer ton code on pourra voir par la suite. Sinon tu auras réussi.

Discussions similaires

  1. Nas D-Link DNS 325 non detecté par ma Bbox
    Par Suicker dans le forum Hardware
    Réponses: 0
    Dernier message: 24/04/2013, 10h34
  2. Ubuntu 10.10 non detecté par le nouveau grub2
    Par laracroft87 dans le forum Ubuntu
    Réponses: 1
    Dernier message: 15/04/2011, 16h18
  3. fonction non linéaire par raphson
    Par crippella dans le forum MATLAB
    Réponses: 36
    Dernier message: 19/03/2010, 08h03
  4. Carte reseau non detecte par Windows Vista
    Par jawed dans le forum Installation
    Réponses: 1
    Dernier message: 03/10/2007, 12h15
  5. [FLASH MX2004] Toucher Enter(Entrée) non detectée par le listener
    Par Demco dans le forum ActionScript 1 & ActionScript 2
    Réponses: 2
    Dernier message: 04/05/2006, 13h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo