не удалось обновить вывод

#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, '_'); изначально заполняет их пробелами.