Bonjour,
Je dois réaliser un programme (pour le bac) et j'ai décidé de réaliser une bataille navale avec intelligence artificielle.
Nos seuls prérequis sont d'utiliser si possible les fonctions contenues dans Isn.java (je peux le rajouter ici au besoin, mais je préfère pour le moment juste mettre les lignes importantes étant donné qu'il fait tout de même 260 lignes).
Pour réaliser ce code je me retrouve plusieurs fois à devoir utiliser des scanners pour lire des valeurs. Cependant, j'ai été confronté à un bug après avoir réalisé cette portion du code :
En effet, je me suis aperçu que mon Isn.readInt ne fonctionnait plus. Je me suis donc renseigné sur Google et en lisant ce poste, je me suis rendu compte qu'une fois la ligne :
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 public static void main(String[] args) { //logs console System.out.println("Utilisez cet interface pour jouer !"+"\n"); //gestion de la sélection String choix_menu = "nada"; Scanner mainMenu = new Scanner(System.in); //stand alone du menu while(égalité(choix_menu, "Nouvelle partie") == false) { System.out.println("Rentrez l'action souhaitée :"+"\n"); System.out.println("1) Nouvelle partie"); System.out.println("2) Quitter"+"\n"); choix_menu = mainMenu.nextLine(); switch(choix_menu) //menu prenant en comptes de multiples cas { case "1": choix_menu = "Nouvelle partie"; break; case "1)": choix_menu = "Nouvelle partie"; break; case "nouvelle partie": choix_menu = "Nouvelle partie"; break; case "Nouvelle partie": break; case "2": System.exit(0); break; case "2)": System.exit(0); break; case "quitter": System.exit(0); break; case "Quitter": System.exit(0); break; default: System.out.println("Ce choix n'est pas considéré."+"\n"+"Vérifiez les majuscules."+"\n"); } } mainMenu.close(); System.out.println("1 ou 2 joueurs ?"); int nombre_joueur = Isn.readInt(); //Fin menuexécutée, je ne pouvais plus réaliser d'autre scanners, étant donné que System.in est déchargé.
Code : Sélectionner tout - Visualiser dans une fenêtre à part mainMenu.close();
Cependant, par la suite je me retrouve à devoir réaliser un menu similaire dans un static void :
Or ce dernier est situé au-dessus du public static void dans la chronologie, le scanner n'est donc pas encore ouvert. Toutefois Eclipse m'indique de fermer mes scanners.
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 static void partie_un_joueur() { System.out.println("\n"+"Que la partie commence !"+"\n"); //Pile ou face pour savoir qui commence int pujPoFchoix = 0, pujRandom = (int)(Math.random()); String pujChoix = "Mauvais"; Scanner pujPoF = new Scanner (System.in); while(égalité(pujChoix, "Ok") == false) { System.out.println("Choisissez pile ou face pour savoir qui commencera :"+"\n"+"1) Pile"+"\n"+"2) Face"); pujChoix = pujPoF.nextLine(); if (égalité(pujChoix, "Ok") == true) {} else { switch(pujChoix) { case "1": pujChoix = "Ok"; pujPoFchoix = 1; break; case "1)": pujChoix = "Ok"; pujPoFchoix = 1; break; case "pile": pujChoix = "Ok"; pujPoFchoix = 1; break; case "Pile": pujChoix = "Ok"; pujPoFchoix = 1; break; case "2": pujChoix = "Ok"; pujPoFchoix = 2; break; case "2)": pujChoix = "Ok"; pujPoFchoix = 2; break; case "face": pujChoix = "Ok"; pujPoFchoix = 2; break; case "Face": pujChoix = "Ok"; pujPoFchoix = 2; break; default: System.out.println("Ce choix n'est pas considéré."); } } } pujPoF.close(); if (pujRandom == pujPoFchoix) { System.out.println("Le joueur emporte la main !"); } else { System.out.println("L'ordinateur emporte la main"); } }
Dois-je ignorer l'avertissement d'Eclipse ? Ou y a-t-il une astuce ?
La première forme de réponse à laquelle j'avais pensé et qui théoriquement fonctionne, serait d'extraire le code du static void et de le mettre à la suite dans le public static void. Cependant, pour plus de clarté et pour simplifier mes explications lors de mon oral, j'aimerais garder cette fonction, si aucune solution n'est possible je la supprimerai.
Quelqu'un saurait-il me guider un peu ?
Merci d'avance pour votre aide.
Partager