Игра Java Hangman - замена персонажей

1

У меня возникают проблемы с заменой символов в массиве char. Я пробовал метод .replace, но он не работает. Знаете ли вы, как заменить буквы в массиве char, с переменной char GuessedLetter. Это код всего кода, который я разработал до сих пор:

import java.util.Scanner;

public class Hangman{

public static void main(String []args){
    Scanner Input = new Scanner(System.in);

    String[] CollectionOfWords = {"apple","banana","pear","plum","watermelon"};

    int RadmNumber = (int) Math.ceil (Math.random() * CollectionOfWords.length);

    String RadmWord = CollectionOfWords[RadmNumber];

    System.out.println(RadmWord);
    char[] GenRadmLetter = RadmWord.toCharArray();
    char[] GenRadmLetter2 = RadmWord.toCharArray();
    for (int x = 0; x<GenRadmLetter.length; x++){
        GenRadmLetter[x]='?';
    }

    System.out.println(String.valueOf(GenRadmLetter));
    Scanner input = new Scanner(System.in);
    System.out.println("Hello. Guess a letter.");
    char GuessedLetter = Input.next().charAt(0);
    int RW = RadmWord.indexOf(GuessedLetter);
    String GenRadmLetterStr = String.valueOf(GenRadmLetter);

}

}

Спасибо,

Теги:
replace

2 ответа

1
Лучший ответ

Вы пытаетесь изменить String.

Этот класс неизменен, поэтому, когда вы пытаетесь что-то вроде:

GenRadmLetter[x]='?';

Вы не RadmWord данные внутри RadmWord.

Что вы можете сделать, это нечто вроде:

char[] GenRadmLetter2 = new char[RadmWord.length];
for (int x = 0; x < RadmWord.length; x++){
    GenRadmLetter[x]='?';
}
String result = new String(GenRadmLetter2);

Хотя, возможно, вы захотите сохранить отображаемую String в виде массива символов, чтобы можно было легко изменять отображение.

  • 0
    Я подумываю о замене позиции 'RW' массива 'GenRadmLetter' на переменную 'GuessedLetter'. Это код, который я до сих пор представлял: 'GenRadmLetter [RW] == GuessedLetter;', но я не уверен в правильном способе написания этого кода. Какие-нибудь советы? Спасибо за вашу помощь.
  • 0
    @ user3207654 лучшим способом было бы перебрать слово, которое угадывает пользователь, и заменить все вхождения в строке, которую вы отображаете (заполнено?) по заданному индексу.
1

Во-первых, имена переменных должны начинаться с буквы нижнего регистра как таковой. Заглавная буква означает тип класса. Это очень стандартное соглашение, когда дело доходит до Java, и, как таковое, оно помогает читаемости при обмене кодом с другими.

String radmWord = collectionOfWords[radmNumber];

Во-вторых, метод String.indexOf(Char) возвращает только первый индекс этого символа внутри строки. Поскольку вы хотели бы заменить все вхождения этого символа, вам нужно было бы на самом деле прокрутить слово, проверяющее каждый символ, чтобы увидеть, является ли это признаком, который был угадан. Оттуда вы могли бы заменить этот индекс в своем угадывающем слове. Взгляните на этот код, который я привел в качестве примера, он поможет вам понять, что вам нужно сделать:

String randomWord = "apple";
String guessWord = "?????";
char guess = 'p';
for (int i = 0; i < randomWord.length(); i++) {
    if (randomWord.charAt(i) == guess) {
        char[] tempGuess = guessWord.toCharArray();
        tempGuess[i] = guess;
        guessWord = Arrays.toString(tempGuess);
    }
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню