Я создаю игру в слова в качестве задания для класса, который случайным образом генерирует 4-буквенное слово, используя буквы w, x, y и z, и дает пользователю 10 попыток угадать его. Проблема заключается в том, что при вводе 5 букв я получаю строковый индекс из-за ошибки границ (StringIndexOutOfBoundsException) вместо вывода «Длина предположения не соответствует длине слова».
Это говорит, что ошибка в "lett2 = Character.toLowerCase (word.charAt (wx));" линия. Проблема в том, что мой ТА помог мне написать эту часть кода, поэтому я предположил, что все было правильно. Что я делаю не так?
Код метода:
public int play(String str){
char lett;
char lett2;
int total = 0;
remainingGuesses = remainingGuesses - 1;
for(int wx = 0; wx < str.length(); wx++) {
lett = Character.toLowerCase(str.charAt(wx));
lett2 = Character.toLowerCase(word.charAt(wx));
if (lett2 == lett) {
++total;
}
}
if (total == 4) {
wordFound = true;
}
return total;
}
Основной код:
import java.util.*;
public class GuessingGameMain{
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
boolean again = true;
System.out.println("Welcome to Guess Me!");
System.out.println("A random word will be generated. It will be four letters long and\nconsist of the letters 'W', 'X', 'Y', and 'Z'. Your goal\nis to guess the word within the alloted guesses. Good luck!\n\n");
GuessingGame game = new GuessingGame();
//GuessingGame game = new GuessingGame(1234);
while(again){
while(!game.isOver()){
System.out.println("You have " + game.getRemainingGuesses() + " guesses left.");
System.out.println("Enter your guess:");
String guess = scan.nextLine();
int score = game.play(guess);
System.out.println("There are " + score + " correct letter placements.");
if(guess.length() != 4) {
System.out.println("The length of the guess did not match the length of the word.");
}
}
if(game.isWin()){
System.out.println("Congrats!");
} else {
System.out.println("You lose! The word was: " + game.getWord());
}
System.out.println("Would you like to play again? y/n");
if(Character.toLowerCase(scan.nextLine().charAt(0)) == 'n'){
again = false;
} else {
game.reset();
}
}
System.out.println("Goodbye!");
}
}
Исключение:
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 4
at java.base/java.lang.StringLatin1.charAt(StringLatin1.java:48)
at java.base/java.lang.String.charAt(String.java:709)
at GuessingGame.play(GuessingGame.java:34)
at GuessingGameMain.main(GuessingGameMain.java:21)