Je débute en Java. J'essayais d'émuler le code de bataille navale à une seule dimension du livre Java Head First. Le code ne plante pas, mais je n'arrive pas à le faire fonctionner correctement.
Exemple : [1,2,3]
est le tableau qui contient l'emplacement du navire de guerre. Si je devine un nombre autre que 1, cela s'affiche comme raté. Mais si je devine 1 trois fois de suite (longueur du navire de guerre), je le considère comme coulé. Je n'arrive pas à comprendre ce problème.
Pouvez-vous s'il vous plaît m'aider ici. Le code est posté ci-dessous :
package battleship;
public class battleship {
public int[] battleship = new int[3];
public int numofhits = 0;
String result = "raté"; // variables d'instance complètes
// méthode setter pour initialiser le tableau contenant l'emplacement du navire de guerre
public void setbattleshiploc(int startpos) {
int i = 0;
for(i = 0; i < battleship.length; i++) {
battleship[i] = startpos + i;
System.out.println(battleship[i]);
}
System.out.println("le tableau initialisé est : " + java.util.Arrays.toString(battleship));
}
// méthode getter pour imprimer le tableau du navire de guerre défini
public int[] getbattleshiploc() {
System.out.println("Le tableau du navire de guerre est : " + battleship);
return battleship;
}
// vérifier si la supposition de l'utilisateur est à l'intérieur de l'emplacement du tableau du navire de guerre
public String guessloc(int guessnum) {
//int i = 0;
for(int cell : battleship) {
System.out.println("Nombre deviné : " + guessnum + " élément du tableau : " + battleship[cell]);
System.out.println("cellule : "+ cell + " ,battleship[cell] : " + battleship[cell] );
if(cell == guessnum) {
numofhits++;
if(numofhits == 3) {
result = "coulé";
return result;
} // si les coups sont à 3 alors retourner coulé indiquant qu'il n'y a plus de navire de guerre disponible
else {
result = "touché";
return result;
} // fin du else interne
} // fin du if externe
else {
//numofhits++;
result = "raté";
return result;
} // fin du if-else
} // fin de la boucle for
return "terminé";
} // fin de la fonction guessloc
} // fin de la classe
package battleship;
import java.util.Scanner;
public class gamelauncher {
public Scanner[] reader;
public static void main(String[] args) {
String result = "raté";
int numofguess = 0;
//int loopnum = 0;
battleship launchgame = new battleship(); // lancer le jeu
int startpos = (int) (Math.random() * 5); // générer un nombre aléatoire entre 0 et 4
//int[] location = {startpos, startpos + 1, startpos + 2}; // initialiser trois éléments de tableau consécutifs
launchgame.setbattleshiploc(startpos); // définir le tableau comme emplacement du navire de guerre en utilisant le setter
// afficher la position du navire de guerre
System.out.println("Positions du navire de guerre sont : " + startpos +" ," + startpos+1 + " ," + startpos+2);
System.out.println("Le tableau du navire de guerre est : " + launchgame.getbattleshiploc());
//int[] battleshiplocation = launchgame.getbattleshiploc();
System.out.println(java.util.Arrays.toString(launchgame.getbattleshiploc()));
while(result != "coulé") {
Scanner reader = new Scanner(System.in); // Lecture depuis System.in
System.out.println("Entrez un nombre : ");
int guess = reader.nextInt(); // obtenir l'entier de l'entrée utilisateur
//reader.close(); // fermer le scanner
//loopnum++;
numofguess++;
if(guess < 0 || guess > 7) {
System.out.println("L'espace maximum disponible est de 7 unités (0 à 6) et la longueur du navire de guerre est de 3 unités, veuillez fournir la localisation en conséquence");
continue;
} // fermer la boucle if et passer à l'exécution de la boucle si la supposition n'est pas dans les limites
else {
result = launchgame.guessloc(guess);
System.out.println("Réponse de la méthode de devinette : " + result);
// récupérer le statut (touché/raté/coulé) de la méthode de devinette
if(result == "coulé") {
System.out.println("Nous avons détruit toutes les parties du navire de guerre et cela a pris " + numofguess +" devinettes" );
break; // sortir de la boucle car nous avons tout détruit
} // fin coulé
else if(result == "touché") {
System.out.println("Vous avez détruit " + launchgame.numofhits + " parties du navire de guerre, veuillez continuer");
continue;
}
else {
System.out.println("C'est un raté, idiot, réessayez");
continue;
}
} // fin de l'instruction else externe
} // fin de la boucle while
} // fin de la méthode main
} // fin de la classe