Ваш цикл таков, что он сравнивает символ с каждой позицией, поэтому, даже если ввод символа находится в какой-то позиции, то, как и ваш цикл, он перейдет к else if (guessChar != secrectStrCharArr[i]
для всех других позиций в строке.Например, слово hello и input 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 таковы, что функция установки написана так:
public void setWord(String word) {
this.word = word;
}
И используется как hangman.setWord(word)