Почему на консоли написано Index 0 out of bounds for length 0?
В моем методе сказано CharacterSearch().
Вот мой код. Кстати код Hangman Game. Я новичок в Java и не знаю всех включенных библиотек.
package besingaPi_LE_3_2;
import java.util.Scanner;
public class GameHangman {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int miss = 0;
String choice1;
String temp;
String[] words = {"giraffe", "hipopotamus", "gorilla", "peacock", "armadillo"};
int choice;
//do {
mainMenu();
choice = input.nextInt();
System.out.println();
if (choice == 1){
String wordRandom = Randomizer(words);
// char[] letters = new char[wordRandom.length()];
String mute = secretWord(wordRandom);
temp = mute;
// char c = wordRandom.charAt(3);
// System.out.println(c);
System.out.println(wordRandom);
System.out.println("Note: use only small character/s");
while(!mute.equals(wordRandom)) {
System.out.print("(Guess) Enter a letter in word " + mute + " > ");
choice1 = input.nextLine();
// char letter = choice1.charAt(0);
mute = CharacterSearch(wordRandom, mute, choice1);
if (temp.equals(mute)) {
miss++;
}
temp = mute;
}
System.out.println("The word is " + wordRandom + "." + " You missed " + miss + " time.");
}
else if (choice == 0) {
System.out.println("Thank you!!");
return;
}
}
public static void mainMenu() {
System.out.println("Welcome to Hangman");
System.out.println("[1]START\n[0]EXIT");
System.out.print("Please input your choice: ");
return;
}
public static String CharacterSearch(String word, String muted, String key) {
StringBuilder update = new StringBuilder(muted);
int i;
for(i = 0; i < word.length(); i++) {
if (word.charAt(i) == key.charAt(0)) {
update.setCharAt(i,key.charAt(0));
}
}
muted = update.toString();
return muted;
}
public static String secretWord(String word) {
String temp = "";
for(int i = 0; i < word.length(); i++) {
temp += "*";
}
return temp;
}
public static String Randomizer(String[] words) {
int rand = (int)(Math.random() * words.length);
String word = words[rand];
return word;
}
}
Я пробовал так много вещей, но всегда было написано «Индекс вне границ».




Ошибка «Индекс 0 вне границ для длины 0», с которой вы столкнулись, вероятно, связана с вызовом input.nextLine() после чтения целочисленного ввода с использованием input.nextInt(). Когда вы нажимаете Enter после ввода целого числа, input.nextLine() считывает символ новой строки ('\n'), который не был уловлен вашим кодом.
Чтобы исправить это, вы можете добавить дополнительный input.nextLine() после чтения целого числа, чтобы использовать символ новой строки. Измените свой код следующим образом:
choice = input.nextInt();
input.nextLine();
System.out.println();
if (choice == 1) {
// ...
}
Это должно предотвратить ошибку сейчас. Не волнуйтесь, я постоянно совершал эту ошибку.
@PioloPascualBesinga Да, если вы решите удалить System.out.println(); строку, вы также можете удалить соответствующий input.nextLine(). Кроме того, если ваш код теперь работает, пожалуйста, примите этот ответ, чтобы другие люди знали, что этот вопрос решен.
Готово, спасибо.
Возможно, вы можете добавить System.out.println прямо перед проблемным кодом, проверить содержимое строкового слова и ключа и закомментировать цикл for. Таким образом, вы можете проверить, соответствуют ли слова и ключевые строки вашим ожиданиям.
«... почему консоль сказала, что индекс 0 выходит за пределы для длины 0. ...»
Значение choice1 пусто.
Вызов input.nextLine() после вызова input.nextInt() просто переместит курсор сканера на следующую строку.
Например, представьте, что вы попросили пользователя ввести 3 числа в одной строке.
Вы должны использовать nextInt 3 раза, а затем один раз nextLine, чтобы перейти к следующей строке.
Вот позиция курсора для каждого вызова.
Enter 3 values: 100 200 300
^ ^ ^
^ | | |
| nextInt 1 | nextInt 3
| |
nextLine nextInt 2
Вызовите nextLine после назначения выбора.
choice = input.nextInt();
input.nextLine();
Вот пример вывода.
Слово «Гиппопотам» тоже написано неправильно.
Welcome to Hangman
[1]START
[0]EXIT
Please input your choice: 1
hipopotamus
Note: use only small character/s
(Guess) Enter a letter in word *********** > h
(Guess) Enter a letter in word h********** > i
(Guess) Enter a letter in word hi********* > p
(Guess) Enter a letter in word hip*p****** > o
(Guess) Enter a letter in word hipopo***** > t
(Guess) Enter a letter in word hipopot**** > a
(Guess) Enter a letter in word hipopota*** > m
(Guess) Enter a letter in word hipopotam** > u
(Guess) Enter a letter in word hipopotamu* > s
The word is hipopotamus. You missed 0 time.
Спасибо за это, мой код теперь работает. Но один вопрос, если я выберу System.out.println(); часть, я также выберу input.nextLine();