Member 14938017 Ответов: 1

Java hangman ошибка программы возникает, когда угадывается одна и та же буква


import java.util.Random;
import java.util.Scanner;
import java.util.ArrayList;
public class Hangmaniona {
Scanner sc = new Scanner(System.in);
int life = 9; // Takes 0 into account hence not 10
  void play(){
    //Secret words
    String[] bagOfWords = new String[]{"the", "walrus", "and", "carpenter", "were", "walking", "close", "at", "hand"};
    
    //Initialize the random number generator
    System.out.println("Type an arbitrary number");
    int seed = sc.nextInt();
    Random random = new Random(seed);
    
    //Select a secret word
    String secret = bagOfWords[random.nextInt(bagOfWords.length)];
    char[] filler = new char[secret.length()];
    ArrayList<Character> givenCharacter = new ArrayList<Character>();    
    for(int i = 0; i < secret.length(); i++) { 
      filler[i] = '_'; 
    }
    System.out.println(filler);


    while(life > 0) {
    char x = sc.next().charAt(0); // call x userinput 

    if(givenCharacter.contains(x)) {
      life--;
      System.out.println(filler);
      System.out.println("Already entered");
      System.out.print("life remaining"+life);
      continue;
    }
     givenCharacter.add(x);

      if(secret.contains(x+"")) {
        for(int y=0; y<secret.length(); y++) {
          if(secret.charAt(y)==x) {
            filler[y]=x;
          }
        }
      }
      else {
        life--;
      }
      System.out.println(filler);
      System.out.println("life remaining:" + life);
      
      if(secret.equals(String.valueOf(filler))) {
        System.out.println("Well done, you won!");
        break;
      }

    }
    if(life==0) {
      System.out.println("Unlucky, you lost!");
      System.out.println("The secret word was:" + secret);
    }
  }
  public static void main(String[] args) { 
    new Hangman().play();
  }
}


Что я уже пробовал:

У меня есть ошибка с этой программой, которая заключается в том, что когда пользователь вводит ту же букву, которая была угадана ранее, программа не уменьшает значение "жизни" на 1, а вместо этого сохраняет его постоянным. Может ли кто-нибудь помочь мне решить эту проблему ? Я считаю, что ошибка возникает из-за того, что приведенный ниже оператор if не может быть прочитан.

if(givenCharacter.contains(x)) {
      life--;
      System.out.println(filler);
      System.out.println("Already entered");
      System.out.print("life remaining"+life);
      continue;
    }

CPallini

Я могу подтвердить, что ваш код работает так, как задумано. Это результат запуска на моем Linux-боксе:

Type an arbitrary number                                                                                                                        
3                                                                                                                                               
_______                                                                                                                                         
a                                                                                                                                               
_a_____                                                                                                                                         
life remaining:9                                                                                                                                
a                                                                                                                                               
_a_____                                                                                                                                         
Already entered                                                                                                                                 
life remaining8a                                                                                                                                
_a_____                                                                                                                                         
Already entered                                                                                                                                 
life remaining7a                                                                                                                                
_a_____                                                                                                                                         
Already entered                                                                                                                                 
life remaining6e                                                                                                                                
_a_____                                                                                                                                         
life remaining:5                                                                                                                                
e                                                                                                                                               
_a_____                                                                                                                                         
Already entered                                                                                                                                 
life remaining4i                                                                                                                                
_a__i__
life remaining:4
i
_a__i__
Already entered
life remaining3i
_a__i__
Already entered
life remaining2

1 Ответов

Рейтинг:
0

Sandeep Mewara

Цитата:
когда пользователь вводит ту же букву, которая была угадана ранее, программа не уменьшает значение "жизни" на 1, а вместо этого сохраняет его постоянным

Я не смотрите здесь проблему и верьте, что код будет работать так, как задумано.

Случайно, вы пишете этот код в среде, где все входные данные должны быть сделаны перед запуском программы, как какая-то скрипка? Если это так, то ваша программа дает 10 шансов угадать, и если входные данные не имеют такой длины, то она выдаст ошибку
char x = sc.next().charAt(0);


Я говорю это, так как видел такие случаи и ошибки.
Exception in thread "main" java.util.NoSuchElementException

Просто чтобы проверить, начните с меньшего количества шансов и посмотрите.

Кстати, просто отладьте, и все будет кристально ясно, что происходит и, возможно, приведет к тому, почему.


CPallini

5.

Sandeep Mewara

Спасибо.