Java hangman ошибка программы возникает, когда угадывается одна и та же буква
import java.util.Random; import java.util.Scanner; import java.util.ArrayList; public class Hangmaniona { Scanner sc = new Scanner(System.in); int life = 9; // Takes 0 into account hence not 10 void play(){ //Secret words String[] bagOfWords = new String[]{"the", "walrus", "and", "carpenter", "were", "walking", "close", "at", "hand"}; //Initialize the random number generator System.out.println("Type an arbitrary number"); int seed = sc.nextInt(); Random random = new Random(seed); //Select a secret word String secret = bagOfWords[random.nextInt(bagOfWords.length)]; char[] filler = new char[secret.length()]; ArrayList<Character> givenCharacter = new ArrayList<Character>(); for(int i = 0; i < secret.length(); i++) { filler[i] = '_'; } System.out.println(filler); while(life > 0) { char x = sc.next().charAt(0); // call x userinput if(givenCharacter.contains(x)) { life--; System.out.println(filler); System.out.println("Already entered"); System.out.print("life remaining"+life); continue; } givenCharacter.add(x); if(secret.contains(x+"")) { for(int y=0; y<secret.length(); y++) { if(secret.charAt(y)==x) { filler[y]=x; } } } else { life--; } System.out.println(filler); System.out.println("life remaining:" + life); if(secret.equals(String.valueOf(filler))) { System.out.println("Well done, you won!"); break; } } if(life==0) { System.out.println("Unlucky, you lost!"); System.out.println("The secret word was:" + secret); } } public static void main(String[] args) { new Hangman().play(); } }
Что я уже пробовал:
У меня есть ошибка с этой программой, которая заключается в том, что когда пользователь вводит ту же букву, которая была угадана ранее, программа не уменьшает значение "жизни" на 1, а вместо этого сохраняет его постоянным. Может ли кто-нибудь помочь мне решить эту проблему ? Я считаю, что ошибка возникает из-за того, что приведенный ниже оператор if не может быть прочитан.
if(givenCharacter.contains(x)) { life--; System.out.println(filler); System.out.println("Already entered"); System.out.print("life remaining"+life); continue; }
CPallini
Я могу подтвердить, что ваш код работает так, как задумано. Это результат запуска на моем Linux-боксе:
Type an arbitrary number 3 _______ a _a_____ life remaining:9 a _a_____ Already entered life remaining8a _a_____ Already entered life remaining7a _a_____ Already entered life remaining6e _a_____ life remaining:5 e _a_____ Already entered life remaining4i _a__i__ life remaining:4 i _a__i__ Already entered life remaining3i _a__i__ Already entered life remaining2