Справка Java hangman, включая мой код

#java #oop

#java #ооп

Вопрос:

** Здравствуйте, мне нужно создать игру hangman на Java. Я не могу использовать массивы. Большая часть моего кода выполнена, но у меня возникли некоторые проблемы, и некоторые советы были бы желательны.


Я только что нашел кое-что еще, по чему я мог бы воспользоваться помощью. После запроса у пользователя нового секретного слова и использования newHangMan.setSecretWord(newWord); мое замаскированное слово не сбрасывается на «????» (с тем же количеством «?», что и слова в секретном слове).


Я очень сожалею о таком длинном сообщении и плохом форматировании (1-й раз публикую здесь). Кто-нибудь может помочь?**

Это мой файл класса:

  public class HangMan 
{

private String secretWord = "bigbang",  disguisedWord = "";
private int guessCount = 0, missCount = 0;



public void setSecretWord(String newWord)
{
    secretWord = newWord;
    guessCount = 0;
    missCount = 0;

    int wordLength = newWord.length();
    while(wordLength > 0)
    {
        disguisedWord = disguisedWord   "?";
        wordLength--;
    }

}

public String getSecretWord()
{
    return secretWord;
}




 public boolean isFound()
 {  
    return secretWord.equalsIgnoreCase(disguisedWord);

 }


 public String getDisguisedWord()
 {
     return disguisedWord;
 }

 public int getGuessCount()
 {
     return guessCount;
 }

 public int getMissesCount()
 {
     return missCount;
 }

 public void guessCharacter(char c)
 {
    // int position = secretWord.indexOf(c);
     boolean got_it = false;
     String updateDisguised="";

     for(int i=0; i < secretWord.length();i  )
     {

         if(c == secretWord.charAt(i))
         {

             updateDisguised = updateDisguised   secretWord.charAt(i);

             String checkDuplicate = updateDisguised.substring(0,i);
             int duplicatePos = checkDuplicate.indexOf(c);
             if(duplicatePos <0)
                 guessCount  ;
             got_it = true;


         }
         else 
         {
             updateDisguised = updateDisguised   disguisedWord.charAt(i);
         }

     }
     if(got_it == false)
     {
         missCount  ;
         guessCount  ;
     }


     disguisedWord = updateDisguised; 

 }










 }
  

Это мой основной метод:

 import java.util.Scanner;



 public class HangManGame {

public static void main(String[] args) 
{


    boolean retry= true;
    String retry_ans;

    Scanner kb = new Scanner(System.in);


    HangMan newHangMan = new HangMan();

    String word = newHangMan.getSecretWord();
    String input;
    char guess;
     newHangMan.setSecretWord(word);

    System.out.println("Hangman game starts:");

do{


    System.out.println("Guess this: "   newHangMan.getDisguisedWord());
    System.out.println("Enter your guess character: [guess]");
    input = kb.next();
    guess = input.charAt(0);

    newHangMan.guessCharacter(guess);

    System.out.println(newHangMan.getDisguisedWord());

    System.out.println("Number of guesses so far : "   newHangMan.getGuessCount());
    System.out.println("NUmber of misses so far: "   newHangMan.getMissesCount());




    if((newHangMan.getMissesCount()==7) || (newHangMan.isFound()))
    {
        System.out.println("The game is over");

        System.out.println("Would you like to try again?");
        retry_ans = kb.next();
        if(retry_ans.equalsIgnoreCase("yes"))
        {
            retry = true;
            System.out.println("Please enter a new secret word:");
            String newWord = kb.next();
            newHangMan.setSecretWord(newWord);
        }
        else
        {
            retry =false;
        }

    }






    }   while(retry == true);




}
  

}

Комментарии:

1. Это не сработает — очень плохое описание вашей проблемы. Расскажите нам, чего вы ожидаете, и что у вас есть вместо этого. Компилируется ли он? Выполняется ли он, но с исключением? Если да, то какова трассировка стека? Дает ли это неверный результат для данного ввода? Если да, то каковы входные данные, каков ожидаемый результат и каков эффективный результат?

2. Проблема, с которой я столкнулся, заключалась в том, что игровой цикл в основном методе не прерывался, когда метод isFound() был удовлетворен. Извините за путаницу.

Ответ №1:

 (newHangMan.isFound()=true)
  

должно быть

 newHangMan.isFound()
  

Не сравнивайте bool с другим bool.
= — это оценка boolean .

Комментарии:

1. Вау, это было так просто. Теперь цикл останавливается, когда слова совпадают. Большое спасибо.

2. Я сделаю это, когда смогу (репутация все еще слишком низкая).

Ответ №2:

Заменить

 while(retry = true);
  

с

 while(retry);
  

Первое — это присваивание, поэтому оно никогда не вычисляется false , хотя и должно.

Ответ №3:

Ваше условие while является присваиванием, а не сравнением, что, вероятно, является причиной вашей проблемы — вы устанавливаете значение retry to true ( retry = true ) вместо того, чтобы проверять, что значение retry currently равно true ( retry == true ) .

Ответ №4:

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

 While(retry == true)