#java #for-loop
Вопрос:
Я пытаюсь написать код для игры в палача, и он работает правильно, но каждый раз, когда я ввожу персонажа, он сбрасывает мои выходные данные. Может кто-нибудь, пожалуйста, помочь.
мой код:
import java.util.*; public class game { public static void main(String args[]) { Scanner in = new Scanner(System.in); String list[] = {"apple", "banana", "mango", "kiwi", "coconut", "papaya", "lichi", "strawberry", "orange", "cherry"}; int rand = (int)(Math.random()*9) 0; String word = list[rand]; String ask = "_"; for(int i = 1; i lt; word.length();i ){ ask = ask "_"; } System.out.println(ask); System.out.println("hint: It is a fruit"); for (int j = 1; jlt;=15; j ){ System.out.println("Enter a character: "); char input = in.next().charAt(0); for (char i : word.toCharArray()){ if(input == i){ System.out.print(input); continue; } System.out.print("_"); } } } }
Небольшая часть выходных данных:
______ hint: It is a fruit Enter a character: a __a___ Enter a character: o o_____ Enter a character: r _r____ Enter a character: n ___n__ Enter a character:
Когда я ввожу «а», он печатает его правильно, но когда я ввожу какой-то другой символ, он печатает этот символ, а не «а». Может кто-нибудь, пожалуйста, скажите мне, что я должен сделать, чтобы получить правильный вывод.
Комментарии:
1. Ну что ж… в конце концов, это работает неправильно. У вас уже есть переменная ask, которая в основном содержит необходимые места размещения букв. Все, что вам нужно сделать, это перезаписать позиции, в которых фактически существует введенный символ. Вы можете сделать это, используя что-то вроде этого:
ask = ask.substring(0, i) input ask.substring(i 1);
но тогда, конечно, вам нужно будет повторить случайное слово иi
сохранить текущий проверяемый индекс.
Ответ №1:
Похоже, вы не сохраняете строку с персонажем, добавленным в игру, вы только печатаете ее. Вероятно, вам захочется сделать что-то вроде добавления нового символа в строковую переменную _ask, а не печатать по ходу, а затем печатать после выполнения цикла for. В принципе, вы нигде не храните прошлые раунды.
Комментарии:
1. спасибо, что помогли мне и подсказали, как мне решить мою проблему
Ответ №2:
Как уже упоминалось в другом ответе, вам нужно запомнить персонажей из предыдущих попыток. Это можно было бы, например, сделать так:
String tempAsk = ""; for (char i : word.toCharArray()){ if(input == i){ tempAsk = i; } else { tempAsk = ask.charAt(i); } } ask = tempAsk; System.out.println(ask);
Комментарии:
1. Я думаю, это не тот ответ, который я искал. Все равно спасибо тебе
Ответ №3:
Я думаю, что в курсе for (char i : word.toCharArray())
,
вы должны добавить символ в ask
(или иметь другую строковую переменную с именем ans
),
а затем распечатайте ask
в конце цикла
потому что вы не обновляете значение ask и не печатаете место символа в строке, и когда цикл запускается во второй раз, он не показывает последний введенный вами символ
кроме того, вы можете получить конкретные подсказки в соответствии с названием плода, используя чехол-переключатель
и, возможно, появится ошибка, когда игрок введет не того персонажа
Комментарии:
1. Я не в состоянии понять ваш ответ. спасибо вам за ваш ответ
Ответ №4:
Вы можете использовать массив символов, чтобы проверить, какие буквы присутствуют до сих пор, например:
public static void main(String[] args) { Scanner in = new Scanner(System.in); String list[] = {"apple", "banana", "mango", "kiwi", "coconut", "papaya", "lichi", "strawberry", "orange", "cherry"}; int rand = (int)(Math.random()*9) 0; String word = list[rand]; // Create a character array to store the result so far char[] result = new char[word.length()]; //Fill the array with _ Arrays.fill(result, '_'); System.out.println(new String(result)); System.out.println("hint: It is a fruit"); int numChances = 15; for (int j = 1; j lt;= numChances; j ){ System.out.println("Enter a character: "); char input = in.next().charAt(0); for (int i = 0; i lt; word.length(); i ) { if(word.charAt(i) == input){ //update the array with user's correct response result[i] = input; } } // Check how we're doing so far. Make a string with the result String untilNow = new String(result); // Show user what we have so far System.out.println(untilNow); //Check if the user has guessed the word. if(untilNow.equalsIgnoreCase(word)) { System.out.println("You win..."); break; } } }
Комментарии:
1. Я только что запустил java и не знаю некоторых методов, которые вы использовали
2. Я сохранил ваш код. У меня есть дополнительный массив символов для отслеживания прогресса игрока на данный момент. Массив содержит правильные символы, угаданные игроком до сих пор. Думайте об этом как о массиве заполнения пробелов, который содержит правильно угаданный символ в их позиции и _ в другом месте.
char[] result = new char[word.length()];
создает массив иArrays.fill(result, '_');
изначально заполняет их пробелами.