使用StringBuilder的Java循环逻辑(Hangman)

时间:2018-06-06 03:34:28

标签: for-loop while-loop do-while

所以我的问题是我已经设置了大部分代码,除了我尝试的循环似乎总是迭代多次,抛弃正确/不正确的计数。我一直在尝试使用while和for循环的不同组合,这是最后一根稻草。关于我如何能够朝着正确的方向前进的任何帮助或想法都将非常感激。我是一个新手,所以我的代码可能是草率或其他什么,但只要它的工作.Subclass获取输入

sudo

包含游戏逻辑的超类

package hangman;
import java.util.Scanner;
public class Hangman {

    private String word;

    public void setWord() {
        Scanner scan = new Scanner(System.in);
        System.out.println("Enter the secret word: (Under 7 letters)");
        this.word = scan.nextLine();
        this.word = word; 
    }

    public String getWord() {
        return this.word;
    }





}

1 个答案:

答案 0 :(得分:0)

你的循环是这样的,它将一个字符与每个位置进行比较,因此即使字符输入位于某个位置,即循环的方式,它也将转到else if (guessChar != secrectStrCharArr[i]字符串中的所有其他位置。例如,单词是hello,输入是h,循环也将运行为ello,并将错误计数返回为4。

相反,你应该检查匹配并在找到匹配时打破内循环:

for (; triesCount < triesLimit; ) { //for loop can used like this

    System.out.println("Secret Word :" + b.toString());
    System.out.println("Guess a letter :");
    Boolean flag = false; //using a flag to check for match
    char guessChar = scn.next().toCharArray()[0];
    for (int i = 0; i < secretWord.length(); i++) {

        if (guessChar == secretWord.charAt(i)) {
            b.setCharAt(i, guessChar);
            correctCount++;
            hangmanImage(triesCount, correctCount);
            flag = true; //match found
            break; 
        }
     }
     if (!flag) { 
         //if no match is found after checking entire array,
         //increase triesCount
         triesCount++;
         hangmanImage(triesCount, correctCount);
     }
     if (!b.toString().contains("*")) { //game win check
          System.out.println("Congrats! You have won!");
          break;
     }
}

请注意,我删除了行char[] secrectStrCharArr = secretWord.toCharArray();,因为它是多余的而不是必需的。另请注意,我已经更改了用于检查游戏是否获胜的逻辑。

此外,Java约定使得setter函数编写如下:

public void setWord(String word) {
    this.word = word;

}

用作hangman.setWord(word)