Java 绞刑游戏求助,包括我的代码

4

你好,我需要在Java中创建一个猜词游戏。但是我不能使用数组。我的大部分代码已经完成,但我遇到了一些问题,希望能得到一些提示。


我发现另外一个问题需要帮助。在提示用户输入新的秘密单词并使用newHangMan.setSecretWord(newWord)后,我的伪装单词没有重置为"????"(与秘密单词中的单词数量相同的"?")。


非常抱歉这篇文章太长了,而且格式很差(第一次在这里发布)。有人可以帮忙吗?

这是我的类文件:

 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);




}

}


“它无法工作”是你的问题非常糟糕的描述。告诉我们你期望得到什么,以及实际上出现了什么。它能编译吗?它能运行,但是会抛出异常吗?如果是这样,堆栈跟踪是什么?它是否对给定的输入给出了不正确的结果?如果是这样,输入是什么,期望的结果是什么,实际结果是什么? - JB Nizet
我遇到的问题是,当isFound()方法被满足时,主方法中的游戏循环不会停止。对于造成的困惑,我感到抱歉。 - raed
4个回答

4
(newHangMan.isFound()=true)

应该是

newHangMan.isFound()

不要将布尔值与另一个布尔值进行比较。 "="符号用于评估布尔值。

哇,真是太容易了。现在循环将在单词匹配时停止。非常感谢。 - raed
我会在能力范围内尽快翻译(声望还太低)。 - raed

2

替换

while(retry = true);

使用

while(retry);

前者是一个赋值操作,因此它永远不会被评估为false,尽管它应该被这样评估。

1
你的 while 条件是一个赋值语句,而不是比较语句,这很可能是你的问题的原因 - 你正在将 retry 的值设置为 true (retry = true),而不是检查 retry 的值是否等于 true (retry == true)。

0

经典的Java入门错误。检查语句应该是

While(retry == true)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接