我不知道为什么它会在猜测字母不正确的时候打印它打印的文本,如果输入的字母是正确的,我认为它与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
答案 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'
,循环的逻辑将是:
'a'
是否等于'a'
?是; match=true
'a'
是否等于'b'
?没有; match=false
'a'
是否等于'c'
?没有; match=false
除非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...
}
}