如果猜测的字母是正确的,为什么打印猜测字母不正确的if语句?

时间:2016-01-15 14:31:45

标签: java if-statement printing stringbuilder charat

我不知道为什么它会在猜测字母不正确的时候打印它打印的文本,如果输入的字母是正确的,我认为它与if中的charAt()有关。声明,但我似乎没有看到问题是什么。我暗示会非常有帮助。

randW是一个随机的12个字符组成一个文本文件。

private char guess;
        private String randW;
        private int wrongG = 0; // variabel voor foute letter
        private int randNum;
        private StringBuilder hiddenW = new StringBuilder("............");
        private boolean match = true;
void play() {
        for (int i = 0; i < 12; i++) {
            System.out.println("Geef de letter die je wilt raden: " + randW);
            guess = sc.nextLine().toUpperCase().charAt(0);
            for (int ii = 0; ii < randW.length(); ii++) {
                if (guess == randW.charAt(ii)) {
                    hiddenW.setCharAt(ii, guess);
                    match = true;
                } if(guess != randW.charAt(ii)){//Without this if.
                        match = false;
                    }//I want it to do this only if the guessed letter is not in the word

            } // end 2nd loop
            if (match) {
                System.out.println(hiddenW);
                System.out.println("Aantal fouten: " + wrongG);
            }
            if(!match){
                wrongG = wrongG + 1;
                System.out.println("De letter " + guess + " komt niet in het woord voor");
            }
            if(hiddenW.toString().equalsIgnoreCase(randW.toString())){
                System.out.println("Het woord is geraden " + hiddenW);
                break;
            }
        } // end 1st loop

随机词是:HOTELRUIMTES

这是没有if(guess != randW.charAt(ii){ match = false;}

的输出
 Geef de letter die je wilt raden: HOTELRUIMTES
    h
    H...........
    Aantal fouten: 0
    Geef de letter die je wilt raden: HOTELRUIMTES
    l
    H...L.......
    Aantal fouten: 0
    Geef de letter die je wilt raden: HOTELRUIMTES
    s
    H...L......S
    Aantal fouten: 0
    Geef de letter die je wilt raden: HOTELRUIMTES

这是if(guess != randW.charAt(ii){ match = false;}

的输出

随机词是:UITZETTINGEN

 Geef de letter die je wilt raden: UITZETTINGEN
    u
    De letter U komt niet in het woord voor
    Geef de letter die je wilt raden: UITZETTINGEN
    i
    De letter I komt niet in het woord voor
    Geef de letter die je wilt raden: UITZETTINGEN
    t
    De letter T komt niet in het woord voor
    Geef de letter die je wilt raden: UITZETTINGEN

2 个答案:

答案 0 :(得分:0)

这个循环:

for (int ii = 0; ii < randW.length(); ii++) {
    if (guess == randW.charAt(ii)) {
        hiddenW.setCharAt(ii, guess);
        match = true;
    } if(guess != randW.charAt(ii)){//Without this if.
        match = false;
    }//I want it to do this only if the guessed letter is not in the word
} // end 2nd loop

guess每个字母进行比较,如果不相等则将match设置为false,即使前一个字母是。说randW="abc"guess='a',循环的逻辑将是:

  1. 'a'是否等于'a'?是; match=true
  2. 'a'是否等于'b'?没有; match=false
  3. 'a'是否等于'c'?没有; match=false
  4. 除非randW中的最后一个字母等于guess,否则它将始终为假。

    在第一个if语句中添加break以突破循环,以便在您找到匹配时不会与任何其他字母进行比较:

    if (guess == randW.charAt(ii)) {
        hiddenW.setCharAt(ii, guess);
        match = true;
        break;
    } 
    

    修改

    我没有考虑要求替换hiddenW字符串中的所有匹配项,以便在循环之前将match重置为false并删除第二个if语句:

    match = false;
    for (int ii = 0; ii < randW.length(); ii++) {
        if (guess == randW.charAt(ii)) {
            hiddenW.setCharAt(ii, guess);
            match = true;
        } 
    }
    

    这种方式match只有在到达循环的末尾而没有找到匹配时才会为假。

答案 1 :(得分:0)

你的逻辑看起来有些偏差。对于每封信,您都要检查它是否匹配。因此,如果第一个字母是匹配,则设置match = true,但如果下一个字母不匹配,则设置match = false - 这将忽略匹配。尝试这样的事情:

boolean match = false;  // set this initially to false...
for (loop over letters) {
   if (there's a match) {
      match = true;
      break;  // you can stop looking...
   }
}