2017-10-15 1 views
1

행맨 게임을 만들고 있습니다. 나는 거의 끝내었지만 숨겨진 단어에서 추측 된 글자로 대체 될 두 지점 또는 그 이상이있을 때마다 필자가 작성한 코드는 첫 번째 코드에서만 작동합니다. 예를 들어 발견 할 단어가 "볼"이고 사용자가 "b"를 입력하고 "l"을 "b_ll"대신 입력하면 숨겨진 단어로 되돌릴 단어는 "b_l_"입니다. 이것은 사용자가 각 추측 후에 피드백을받지 않고 문자를 먼저 입력하기 때문에 이상한 운동입니다. 여기에 코드가 있습니다.교수형 집행자 게임에서 누락 된 문자로 모든 부분을 채우십시오.

for (int c = 0; c < guessedLetters.length(); c++) 
{ 
    if (wordToBeFound.contains(Character.toString(guessedLetters.charAt(c)))) 
    { 
     hiddenWordChars[wordToBeFound.indexOf(guessedLetters.charAt(c))] = 
     guessedLetters.charAt(c);   
    } 
} 

감사합니다.

답변

2

문제는 indexOf()가 찾은 첫 번째 인덱스 만 제공한다는 것입니다. 첫 번째 히트 이후에 위 코드가 멈추는 것을 의미합니다. 해결책은 다음과 같습니다 :

for (int c = 0; c < guessedLetters.toCharArray().length(); c++) 
{ // for each guessed letter 
    for(int c1 =0; c1<wordToBeFound.toCharArray().length; c1++){ //look at each letter in the word, searching for a match 
     if(guessedLetters[c]==hiddenWordChars[c1]){ 
      hiddenWordChars[c1] = guessedLetters[c];  
     } 
    } 
} 
+1

참고 : 루프의 가드 조건에서 'str.toCharArray()'를 호출하지 마십시오. 이 함수는 호출 될 때마다 문자열의 문자를 새로운 배열로 복사하는데, 이는 각 루프 반복을 의미합니다. 'str.length()'를 사용하십시오 (어쨌든'str.toCharArray(). length'를 사용해야합니다). 또한'[]'로 문자열에 색인을 붙일 수 없습니다. –

+0

몇 가지 작은 변경 사항이 있음에도 불구하고이를 해결합니다. 요점은 논리가 좋다는 것입니다. 고맙습니다! – Leet

관련 문제