Я пытаюсь создать игру Hangman. Предположим, что слово «угадать» было «лампочкой». Когда пользователь угадывает письмо, которое появляется более одного раза в слове, которое в данном случае является «l», я хочу удалить эту букву из ArrayList во всех местах, чтобы ArrayList содержал «ightbub». Ниже приведен мой код для класса, который обрабатывает userGuesses и проверяет буквы в выбранном слове. ДЛЯ КОДА НИЖЕ: wordToGuess = ("lightbulb")ArrayList (выпуск с удалением)
Еще одна проблема: ниже этого кода я включил вывод. Как вы можете видеть, когда я вхожу в одно и то же письмо, он говорит, что я догадался о письме, хотя это письмо должно быть удалено из ArrayList.
import java.util.ArrayList;
public class InputChecker extends PromptUser{
static int numOfGuesses;
static String userGuess;
static String[] charList;
static boolean contains;
ArrayList<String> characters = new ArrayList<String>();
public boolean alive = true;
static WordSelector ws = new WordSelector();
static LengthReturner lr = new LengthReturner();
static PromptUser pu = new PromptUser();
static String wordToGuess = ws.setWord();
static int wordLength;
public static void finish() {
System.out.println();
System.out.println();
System.out.println("Congratulations! You have finished the game.");
System.out.println("Coming soon: GUI");
}
public boolean askUser() {
while(alive == true) {
boolean validGuess = false;
while(validGuess == false) {
userGuess = pu.getUserInput("Enter your guess here:");
if(userGuess == null || userGuess.length() > 1) {
validGuess = false;
System.out.println("Enter ONE letter!");
} else {
validGuess = true;
}
}
wordLength = lr.setLength(wordToGuess);
charList = wordToGuess.split("(?!^)");
contains = false;
for(String c : charList) {
characters.add(c);
}
for (String c : characters) {
if(userGuess == c) {
characters.remove(c);
contains = true;
}
}
if(contains == true) {
System.out.println("You guessed a letter!");
numOfGuesses++;
if(characters.isEmpty()) {
System.out.println();
System.out.println();
System.out.println("Congratulations! You have successfully guessed the word, which was " + wordToGuess + ".");
System.out.println("You took " + numOfGuesses + " guesses!");
alive = false;
}
} else {
System.out.println("Your guess, '" + userGuess + "', is not in the word!");
numOfGuesses++;
}
}
return alive;
}
}
Вот результат, когда я ввожу одну и ту же букву повторно. Обратите внимание, как всегда говорится, что я успешно догадался о письме, хотя это письмо должно быть удалено из ArrayList. Так или иначе, remove() не работает для меня. Опять же, wordToGuess = ("лампочка :)
Enter your guess here:
l
You guessed a letter!
Enter your guess here:
l
You guessed a letter!
Enter your guess here:
l
You guessed a letter!
Enter your guess here:
l
You guessed a letter!
Enter your guess here:
l
You guessed a letter!
Enter your guess here:
l
You guessed a letter!
Enter your guess here:
l
You guessed a letter!
Enter your guess here:
l
You guessed a letter!
Enter your guess here:
l
You guessed a letter!
Вы бы быстро поняли свою проблему, если попытались отладить. В частности: вы должны попробовать распечатать «символы» сразу после распечатки «Вы догадались о письме!». – ruakh