2012-11-12 4 views
1

이것은이 사이트의 첫 번째 질문이므로 총 멍청이가 아니려고 노력할 것입니다.특정 문자의 자바 대체

현재 Java에서 행맨 게임을 만들고 있습니다. 우리가 우리에게

의 출력을 제공하는 "_ _ _ _ _"

"유령" 유령이 "_"로 대체됩니다 단어,

hiddenWord = ghost.length(); 
for (i=0; i < ghost.lenth(); i ++) 
System.out.print("_ ") 

을 부여하는 경우 그래서 내 질문은

내가 대체 어떻게 "O", 추측됩니다 우리는 문자 "O" 편지를 추측 말할 수 있습니다`

"_ _ _ _ _" with 
"_ _ o _ _ " 

내 현재의 클래스 파일

public void pickWord() 
    { 
     String[] listOfWords; 
     listOfWords = new String[10]; 
     listOfWords[0] = "shenanigans"; 
     listOfWords[1] = "conversely"; 
     listOfWords[2] = "octopus"; 
     listOfWords[3] = "dizzy"; 
     listOfWords[4] = "malicious"; 
     listOfWords[5] = "goosebumps"; 
     listOfWords[6] = "flying"; 
     listOfWords[7] = "staff"; 
     listOfWords[8] = "xylophone"; 
     listOfWords[9] = "zapping"; 
     Random generator = new Random(); 
     int lineNumber = generator.nextInt(9); 
     disguisedWord = listOfWords[lineNumber]; 


    } 
    public void displayMark() 
    { 
     for(int i = 0; i < disguisedWord.length(); i ++) 
      underscore = underscore + "_ "; 
     System.out.println(underscore); 

    } 
    public void makeGuess() throws IOException 
    { 
     System.out.println("Your word is " + disguisedWord.length() + " letters long."); 
     System.out.println("Feel free to guess a letter."); 
     guess = (char)System.in.read(); 

답변

0
String ghost = "ghost"; 
String input = "o"; 
for (int i = 0; i < ghost.length(); i++) { 
    if (String.valueOf(ghost.charAt(i)).equalsIgnoreCase(input)) { 
     System.out.print(input + " "); 
    } else { 
     System.out.print("_ "); 
    } 
} 

당신은 을 단순화 할 수있는 삼항 연산자를 사용하여 if 문

System.out.print(String.valueOf(ghost.charAt(i)).equalsIgnoreCase(input) ? input + " " : "_ "); 
+0

제 displayMark 메서드를 그 것으로 대체해야합니까? –

+0

당신은 내 구주 –

0

가장 쉬운 방법은 대상 단어에 Java 정규 표현식을 사용하는 것입니다. 따라서 사용자가 문자를 입력 할 때마다 정규 표현식에서 해당 문자를 찾습니다. 일치하면 문자의 __ 버전의 문자를 대체하는 데 사용할 수있는 일치하는 문자의 색인이 다시 제공됩니다.

...  
    listOfWords[9] = "zapping"; 
    Random generator = new Random(); 
    int lineNumber = generator.nextInt(9); 
    disguisedWord = listOfWords[lineNumber]; 
    char[] hidden = disguisedWord.replaceAll("*","_").toCharArray(); 
} 

public void makeGuess() throws IOException { 
    System.out.println("Your word is " + disguisedWord.length() + " letters long."); 
    System.out.println("Feel free to guess a letter."); 
    String guess = System.in.read(); 

    Pattern pat = new Pattern(guess); 
    Matcher mat = pat.matcher(disguisedWord); 
    while (mat.find()) { 
     int start = mat.start(); 
     hidden[start] = guess.toCharArray()[0]; 
    } 
} 
+0

문자의 색인을 찾기 위해 정규 표현식을 사용할 필요가 없지만,이 함수는 이미'String' API에 있습니다. – Keppil

+0

그 오전 5시와 나는 정규식 일치에 대해 거의 모르는 대학 신입생을 상상한다 어디에서 패턴을 넣을 까? = 새로운 패턴 또는 내 코드를 말하는가? 내 무지를 미안 해요^_^ –

+0

@LeeHurlbert 나는 당신의 코드를 언급하고 있습니다. 사용자가 각각의 추측 후에'Pattern'을 넣었습니다. –

0

왜 어떤 문자 다른 추측 된 어떤 문자 표시 참/거짓 값의 배열을 가지고 있지를 아직도 알려지지 않은가? 나는 정규 표현식과 문자열 대체를 사용하는 것이 교수형 집행자를 일하게하는 쉬운 방법이라고 생각하지 않는다. 특히 다른 편지를 추측 할 때 특히 그렇다.

아마도 이와 비슷한 것일 수 있습니다.

String answer = "someword"; 
boolean[] knownLetters = new boolean[answer.length()]; 
for (int i = 0; i < answer.length(); i++) { 
    if(knownLetters[i]) { 
     System.out.print(answer.charAt(i)); 
    } else { 
     System.out.print("_"); 
    } 
} 
System.out.println(""); 
+0

이 방법 표시 표시를^^ ^로 바꿀 수 있습니까? 랜덤 화 된 단어는 –

+0

입니다. 물론이 방법으로 이것을 랩핑하고 매개 변수로 대답을 전달하고 knownLetters 배열을 다음과 같이 이동시킬 수 있습니다. 바깥 쪽 범위는 다른 방법과 다른 곳에서 필요할 때 사용할 수 있습니다. – Jayson

0

가장 쉬운 방법은 변수를 상태에 저장하고 실제 세계를 반복함으로써 일치하는 문자를 대체하는 것이라고 생각합니다.

private String word; 
private char[] state; 

public void guess(char input){ 
    for (int i = 0; i < word.length(); i++) { 
     if (word.toLowerCase().charAt(i) == input){ 
      state[i] = word.charAt(i); 
     } 
    } 
} 

"state"의 내용을 인쇄 할 수 있습니다.

관련 문제