Я пытаюсь создать игру палача. У меня все работает так, как я хочу, за исключением одного метода. Этот метод называется processGuess
и берет строку String и два массива String в качестве параметров. Первый массив - это массив spaceArray
и содержит символы подчеркивания, соответствующие длине предполагаемого слова (например: hello производит [ _ , _ , _ , _ , _ ]
). Второй массив называется wordArray
и содержит слово, которое пользователь пытается угадать.Почему метод не работает, как я думал?
Как я себе мой метод работу следующим образом:
- Создать массив, который хранит все догадывались буквы (
guessArray
) - Создать счетчик, который отслеживает числа догадок (
guessCounter
) - Используйте цикл for, чтобы перебирать каждую букву слова и сравнивать его с буквой, которую пользователь угадал.
a. Если буква находится в слове, добавьте письмо в правильный индексspaceArray
- Сравнить
spaceArray
поwordArray
a. Если равный, напечатайте что-то, говорящее, что они выиграли в x количество догадок
b. Если не равно.- печати
spaceArray
- Вызвать метод, который просит пользователя угадать следующую букву
- этот метод так, что обрабатывается новый догадывался письмо вызова.
- печати
Проблема заключается в том, что, когда я вспоминаю этот метод, не содержит новое письмо, но все еще содержит старое письмо. Я не знаю, что я делаю неправильно. Это первый случай, когда я попытался использовать методы внутри метода.
Вот мой метод:
public static void main(String[] args) throws FileNotFoundException {
Scanner file = new Scanner(
new File("C:/FilesForJava/ScrabbleDictionary.txt"));
instructions();
String[] dictionary = createDictonaryArray(file);
String[] randomWord = getRandomWord(dictionary);
String[] underscoreArray = showSpaces(randomWord);
String letter = getGuesses();
processGuess(letter, underscoreArray, randomWord);
}
public static void instructions() {
System.out.println("Let's play hangman!");
System.out.println();
}
public static String[] createDictonaryArray(Scanner inputFile)
throws FileNotFoundException {
int wordCount = 0;
while(inputFile.hasNext()) {
String word = inputFile.next();
wordCount++;
}
String[] scrabbleDictionary = new String[wordCount];
Scanner file = new Scanner(
new File("C:/FilesForJava/ScrabbleDictionary.txt"));
while(file.hasNext()) {
for(int i = 0; i < wordCount; i++) {
scrabbleDictionary[i] = file.next();
}
}
file.close();
return scrabbleDictionary;
}
public static String[] getRandomWord(String[] dict) {
String word = dict[(int)(Math.random() * dict.length)];
String[] wordArray = new String[word.length()];
for(int i = 0; i < wordArray.length; i++) {
wordArray[i] = word.trim().substring(0, 1);
word = word.trim().substring(1);
}
return wordArray;
}
public static String[] showSpaces(String[] word) {
String[] spaceArray = new String[word.length];
for(int i = 0; i < word.length; i++) {
spaceArray[i] = "_";
}
System.out.println(Arrays.toString(spaceArray));
System.out.println();
return spaceArray;
}
public static String getGuesses() {
Scanner guess = new Scanner(System.in);
System.out.println("Guess a letter: ");
String letter = guess.next();
System.out.println();
//guess.close();
return letter;
}
public static void processGuess(String letter, String[] spaceArray,
String[] wordArray) {
int guessCounter = 0;
String[] guessArray = new String[spaceArray.length];
for(int i = 0; i < spaceArray.length; i++) {
guessCounter++;
guessArray[i] = letter;
String indexLetter = wordArray[i];
if(indexLetter.equalsIgnoreCase(letter)) {
spaceArray[i] = letter;
}
}
if(spaceArray.equals(wordArray)) {
System.out.println("Yes! You won in " + guessCounter + "guesses!");
}else {
System.out.println(Arrays.toString(spaceArray));
getGuesses();
processGuess(letter, spaceArray, wordArray);
}
}
1.) что делает 'getGuesses()' do? 2.) Я не думаю, что вы должны были использовать рекурсию здесь. – EpicPandaForce
Мне нужно больше кода, но я предполагаю, что вам нужно вернуть свое письмо из 'getGuesses' и передать его в' processGuess' вместо параметра 'letter'. –
@ Zhuinden Я добавил остальную часть своего кода. – comfortablyNumb