【问题标题】:How to limit the number of guesses in Hangman in Java如何在Java中限制Hangman中的猜测次数
【发布时间】:2018-03-24 20:58:56
【问题描述】:

所以我的代码运行良好。我只需要限制猜测次数的帮助。而且每次你​​猜错了,都有一个计数器告诉你还剩多少个猜测。

所以我想将猜测的限制设置为 15。因此,每次您做出不正确的猜测时,错误的猜测计数器都会向用户显示(增加压力/压力)剩下 14 次猜测,否则您将失败。

这是我的代码:

    import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Scanner;

public class Hangman {
    private final static int maxGuesses = 5;


    static ArrayList<String> words = new ArrayList<>();

        static boolean isCorrect;

        public static void main(String[] args) {

            // getting file
            File filename = new File("hangman.txt");
            if (!filename.exists()) {
                System.out.println(filename.getAbsolutePath());
                System.out.println(filename + " does not exist.");
                System.exit(1);
            }
            // reading word file
            try {
                Scanner input = new Scanner(filename);
                while (input.hasNext()) {
                    words.add(input.next());
                }
            } catch (FileNotFoundException ex) {
                ex.printStackTrace();
            }
            // debug: display words
            //System.out.println(words);

            Scanner input = new Scanner(System.in);
            String playStats = "y";
            while (playStats.equals("y")) {
                String word = getWord();
                String hiddenWord = getHiddenWord(word);
                int missCount = 0;


                    while (true) {
                    System.out.print("(Guess) Enter a letter in word " + hiddenWord + " > ");
                    char ch = input.next().charAt(0);

                    if (!isAlreadyInWord(hiddenWord, ch)) {

                        hiddenWord = getGuess(word, hiddenWord, ch);
                        if (missCount>maxGuesses){
                           // Print info on max guesses reached
                         System.out.println("you have reached" + missCount + "you have" + maxGuesses + 
                                 " left");
                           break;
                          }
                        if(word.equals(hiddenWord)) {

                        if (!isCorrect) {
                            System.out.println(ch + " is not in the word.");
                            missCount++;
                        }   
                    else {
                        System.out.println(ch + " is already in word.");
                    }
                        break;
                        } 
                        }
                    }
                System.out.println("The word is " + hiddenWord + " You missed " + missCount + " times");
                System.out.println("Do you want to guess another word? Enter y or n >");
                playStats = input.next();
            }

        }

        public static String getWord() {
            return words.get((int) (Math.random() * words.size()));
        }

        public static String getHiddenWord(String word) {

            String hidden = "";
            for (int i = 0; i < word.length(); i++) {
                hidden += "*";
            }
            return hidden;
        }

        static public String getGuess(String word, String hiddenWord, char ch) {

            isCorrect = false;
            StringBuilder s = new StringBuilder(hiddenWord);
            for (int i = 0; i < word.length(); i++) {

                if (ch == word.charAt(i) && s.charAt(i) == '*') {
                    isCorrect = true;
                    s = s.deleteCharAt(i);
                    s = s.insert(i, ch);
                }
            }
            return s.toString();
        }

        public static boolean isAlreadyInWord(String hiddenWord, char ch) {

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

                if (ch == hiddenWord.charAt(i)) {
                    return true;
                }
            }
            return false;
        }
    }

我假设它与我作为计数器的“missCount”有关....但是我如何在其中写下 missCount 不能超过 15 次尝试并显示尝试次数?

提前致谢。

【问题讨论】:

  • 我对这个问题投了反对票,因为这里的代码太多了。为了明确您的问题出在哪里,请删除任何不直接导致您的问题的代码,如果您可以将其减少到十行或更少,我将考虑撤回反对票。请参阅:How to create a Minimal, Complete, and Verifiable exampleHow to Debug Small Programs
  • @Joe C 投反对票。你没有看我的问题。没有问题。我特别指出我的代码正在运行。

标签: java exception-handling counter


【解决方案1】:

请注意,我的建议不是一个优雅的解决方案。

  • 使用值(例如 15)创建静态最终 maxGuesses。
  • 将 while 条件从 !word.equals(hiddenWord) 更改为 true。这个循环现在永远不会终止 - 除非我们引入 breakstatements。
  • 创建一个新的检查(if-condition)来查看是否超过了尝试次数(例如missCount&gt;maxGuesses)。在 if 块中打印此信息,并添加 break 以退出内部 while。
  • 使用word.equals(hiddenWord) 创建另一个检查(如果条件) - 这用于确定是否找到了单词。打印有关找到的单词的信息作为 if 块的一部分,并添加 break 语句
  • 这两个检查都应该是内部 while 循环的一部分。

.

while (true) { 
  if (missedCount>maxGuesses){
   // Print info on max guesses reached
   break;
  }
  // Does the read input stuff
  if (word.equals(hiddenWord)){
   // Print info on word was guessed
   break;
  }
}

【讨论】:

  • 所以我更新了我的代码,你可以在上面看到。现在它所做的一切都是不断重复“在单词中输入一个字母 *****>”,直到你得到正确的单词,无论尝试多少次,我应该如何包含新代码,我做对了吗?跨度>
  • 另外,正如你所看到的,我只是将限制设置为 5 只是为了看看代码会多快停止它
  • 请查看从if(word.equals(hiddenWord)) { 开始的代码对我来说,逻辑似乎不正确:只有当您已经找到该单词时,missCount 才会增加。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-26
相关资源
最近更新 更多