2014-03-04 1 views
0

행맨 프로젝트를하고 있습니다. 나는 대부분의 코드 작업을하고있다."비밀 단어"글자를 입력하십시오.

내가 일할 수없는 부분은 "비밀 단어"에 동일한 문자가 두 개 이상있는 부분입니다. 예를 들어 "hello"에는 2 "l"이 있습니다.

int pos = $Input.indexOf($Guessed); 

if (pos == -1) 
{ 
    System.out.print("Search string '" + $Guessed + "' not found"); 
} 
else 
{ 
    System.out.println("\nSearch string found at " + (pos + 1));    
    pos = $Input.indexOf($Guessed); 
    String before = $Display.substring(0, pos); 
    String after = $Display.substring(pos + $Guessed.length()); 
    System.out.println(before + $Guessed + after); 

    $Display = before + $Guessed + after; 
    System.out.println($Display);    
    $GuessAmt++; 
} 

내가 살펴 보았다 : 그것은 "----"(안녕하세요) 추측이 옳았다 경우에 추측 된 문자로 대체 어디

코드의 부분에 대한 코드입니다 여러 가지 대답은 여기에 있지만 나는 지금까지 일할 수 없습니다. 분명히 누군가 "l"을 추측하면 "-----"는 (hello)의 "--ll-"로 변경됩니다.

나는 도전 과제를 즐기기 때문에 이것을 코딩하는 사람을 찾고 있지 않지만 약간의 힌트가 좋을 것이다 !!

분명히 내 코드를 보면 아쉽게도 배열을 사용할 수 없다고 추측 할 수 있습니다. 이것은 자바 클래스의 소개 일뿐입니다.

도움을 주시면 감사하겠습니다.

EDIT : 현재로서는 첫 번째 "l"이 (hello)의 "l"모두가 아닙니다.

편집 : 변경. 그러나 이제는 "inside if"print 문을 계속 반복합니다. 이 문제를 해결하는 방법을 알지 못한다!

int pos = $Input.indexOf($Guessed); 

     if (pos == -1) 
     { 
      System.out.print("Search string '" + $Guessed + "' not found"); 
     } 
     else 
     { 
      //System.out.println("\nSearch string found at " + (pos + 1)); 

      for(int i=0;i<$StrLength;i++) 
      { 
       System.out.println(i); 
       if($Input.charAt(i) == $Guessed.charAt(0)) 
       { 
        i = $Input.indexOf($Guessed); 
        String before = $Display.substring(0, i); 
        String after = $Display.substring(i + 1); 
        System.out.println("inside if" + before + $Guessed + after); 
        $Display = before + $Guessed + after; 
       } 
      } 



       System.out.println($Display); 



      $GuessAmt++; 
     } 
+4

은 식별자에 달러 기호를 사용하지 마십시오. 그것들은 컴파일러에 의해 생성 된 식별자 (또는 다른 자동 코드 생성 도구)에 의해 예약되어야합니다. – ajb

+0

예. 식별자에 달러 기호를 사용하면 안됩니다. 함수와 변수 이름을 소문자로 시작하고 클래스를 대문자로 시작하는 표준 대문자 규칙을 준수해야합니다. –

+0

당신은이 교환을 한 번만하고 싶다고 말했습니다. 컴파일러는 마음 독자가 아닙니다. 이 작업을 두 번 이상 수행하려면 루프가 필요합니다. – ajb

답변

0

당신은 String 반복 개별적으로 word.charAt(i)를 사용하여 모든 문자를 확인할 수 있습니다.

for (int i = 0; i < word.length; i++) { 
    if (word.charAt(i) == guessedChar) { 
     // do stuff 
    } 
} 
+0

안녕 친구, 제안한 것과 비슷한 것을 추가했지만 작동하지 않습니다. OP의 위 편집 참조 –

1

여전히 싶어 사용하는 경우 indexOf 당신이 모든 편지 사건을 통해 갈 것을 보장 할뿐만 아니라 자사의 오버로드 된 버전을 사용할 수 있습니다 :

int index = str.indexOf('l'); 
while(index >= 0) { 
    // FILL THE BLANKS WITH THE LETTER 
    index = str.indexOf('l', index +1); 
}