Я использую JavaFX, и в настоящее время я работаю над проектом, в котором мне нужно создать игру с палачом. У меня есть текстовое поле и метка, отображающая 1 слово из массива всякий раз, когда я нажимаю кнопку «Начать игру». Итак, всякий раз, когда я нажимаю «Начать игру», скажем, генерируется строка «Школа». Он будет отображаться в текстовом поле и на метке. Вместо того, чтобы показывать фактическую строку, я хотел бы заменить строку специальным символом. Я хотел бы, чтобы текстовое поле показывало '', а метка показывала '_' длины строки, поэтому «Школа» была бы «*****» в текстовом поле и «_ _ _ _ _ _» в Этикетка. Как мне это сделать?
Мой код работает, я просто не знаю, как заменить строку на специальный символ
Это мой код от контроллера
// список слов в массиве
`String[] listWords = {"Tuesday", "School", "Dog", "Vehicle",
"Bird", "Book", "Recipe", "Sun", "Hammer", "Orange"};`
// Для цикла
`for (int i = 0; i < listWords.length; i++) {
String randomWords = listWords[(int)(Math.random() * listWords.length)];
TxtField.setText(randomWords);
wordLabel.setText(randomWords);
}`
Я пытался следить за кучей видео с YouTube, но ни одно не показывалось со строкой массива. Большинство из них используют ArrayList или List, которые я не использую. Я пытался гуглить, и их примеры также не показывают, как это сделать из массива.
Я бы посоветовал пройти консольную версию игры. Когда это будет завершено, работайте над графикой.
Не забудьте просмотреть свой пост после отправки, чтобы вы могли отредактировать любые ошибки: блоки кода используют три обратных кавычки, а не четыре.
Учитывая пример кода для ArrayList, вы сможете легко преобразовать пример для использования массива, если вы понимаете массивы и ArrayList. Но List более гибкий, чем массив. Во-первых, размер массива фиксирован, но размер List можно изменить. Вы можете удалять элементы из List, но не из массива. (Отклонение от темы: если у вас есть массив объектов, вы можете установить для элемента значение null, чтобы имитировать удаление. Если у вас есть массив примитивов, для имитации удаления у вас может быть «специальное значение», указывающее индексированный элемент. является недействительным.)




Это язык программирования, а не помощник. Иногда вам приходится мыслить немного творчески, чтобы выполнить работу. Вместо «замены каждого символа», почему бы просто не создать новую строку? Ты знаешь длину..
public static String starred(String input) {
char[] starred = new char[input.length()];
Arrays.fill(starred, '*');
return new String(starred);
}
replaceAll принимает регулярное выражение, которое представляет собой мини-язык программирования, совсем не похожий на java для сопоставления текста; это полезно только для обычных грамматик (например, вы не можете анализировать код Java), но это очень просто. . — это регулярное выражение для «любого символа». Таким образом:
public static String starred(String input) {
return input.replaceAll(".", "*");
}
Это кажется неправильным — замена этого строкового массива звездочками уничтожит слова, и вам нужно, чтобы они знали, ввел ли пользователь правильную букву. Вы хотели бы получить 1 слово из вашего набора возможных слов, чтобы поиграть с ним, а затем сохранить его и сделать копию со звездочками.
Строки неизменны; вы не можете изменить их. Но вы можете сделать новые струны на основе старых. Или, в этом случае, намного проще, сделайте изменяемую вещь, чтобы вы могли просто заменять символы (предположительно, вы хотите заменить звезды буквами, как пользователь правильно угадает):
List<String> POSSIBLE_WORDS = List.of("Tuesday", "School", ....);
Random rnd = new Random();
String word = POSSIBLE_WORDS.get(rnd.nextInt(POSSIBLE_WORDS.size());
char[] letters = new char[word.length()];
Arrays.fill(letters, '*');
// show to the user
// if user guesses a letter:
char guessedLetter = 'e'; // get user input here.
if (!alreadyGuessed.contains(guessedLetter)) {
boolean matched = false;
for (int i = 0; i < word.length(); i++) {
if (word.charAt(i) == guessedLetter) {
letters[i] = word.charAt(i);
matched = true;
}
}
if (!matched) hangALittleMore();
alreadyGuessed.add(guessedLetter);
}
И так далее.
И мой личный фаворит: используйте хэш-карту.
Извините, иногда немного больше думать не помогает мне. Я только что поступил на программирование 3 месяца назад, и у меня нет знаний в этой области. Но спасибо за вашу помощь. Он должен работать!
Предполагая:
String guesses; // characters guessed so far
String word; // the word to be guessed
Затем, чтобы замаскировать все неугадываемые символы в слове с помощью *:
String display = word.replaceAll("[^" + guesses + "]", "*");
Это создает отрицательный класс символов из догадок, например, регулярное выражение [^abcd] будет соответствовать любому символу, кроме a, b, c или d.
Вот очень простая логика, использующая for,
String replaceString = "*";
String[] maskedListWords = new String[listWords.length];
for (int i=0; i<listWords.length; i++)
{
maskedListWords[i] = listWords[i].replaceAll("[a-zA-Z]", replaceString);
}
for (String string : maskedListWords)
{
System.out.println(string);
}
используйте строку регулярного выражения:: replaceAll