2012-11-06 2 views
1

나는 잠시 동안이 주제를 연구했지만 많은 성공을 거두지 못했다. 나는 StringBuilder를 찾았지만 경이로움을 느끼지 만 그게 내가 가진 것입니다. 그래서이 작업을 수행 할 수있는 간단하고 효과적인 방법이있다, 그러나밑줄을 숯이나 문자열로 바꾸는 효율적인 방법

if(strGuess.equalsIgnoreCase("t")){ 
     mainword.replace(0,1,"T"); 
     gletters.append('T');  
    } 
     else if(strGuess.equalsIgnoreCase("e")){ 
     mainword.replace(1,2,"E"); 
     gletters.append('E');  
    } 
     else if(strGuess.equalsIgnoreCase("c")){ 
     mainword.replace(2,3,"C"); 
     gletters.append('C');   
    } 
     else if(strGuess.equalsIgnoreCase("h")){ 
     mainword.replace(3,4,"H"); 
     gletters.append('H');  
    } 
     else if(strGuess.equalsIgnoreCase("n")){ 
     mainword.replace(4,5,"N"); 
     gletters.append('N');  
    } 
     else if(strGuess.equalsIgnoreCase("o")){ 
     mainword.replace(5,6,"O"); 
     mainword.replace(7,8,"O"); 
     gletters.append('O');  
    } 
     else if(strGuess.equalsIgnoreCase("l")){ 
     mainword.replace(6,7,"L"); 
     gletters.append('L');  
    } 
     else if(strGuess.equalsIgnoreCase("g")){ 
     mainword.replace(8,9,"G"); 
     gletters.append('G');  
    } 
     else if(strGuess.equalsIgnoreCase("y")){ 
     mainword.replace(9,10,"Y"); 
     gletters.append('Y'); 
    } 
     else{ 
     JOptionPane.showMessageDialog(null, "Sorry, that wasn't in the word!"); 
     errors++; 
     gletters.append(strGuess.toUpperCase()); 
    } 
     SetMain = mainword.toString(); 
     GuessedLetters = gletters.toString(); 
     WordLabel.setText(SetMain); 
     GuessedLabel.setText(GuessedLetters); 
     GuessText.setText(null); 
     GuessText.requestFocusInWindow(); 

, 나는 모든 단어마다 편지에 대해이 작업을 수행 할 수 없습니다 여기에 내가해야 그것을처럼 작동하는 내 교수형 집행 인 프로그램을 가지고하는 방법? 내가 원하는 것은 어떤 단어에 대해서만 한 번 사용해야 할 수 있도록 일종의 루프를 갖는 것입니다. 따라서 단어는 기술 (위와 같음) 또는 사과 또는 절임 또는 크리스마스 또는 안녕 등이 될 수 있습니다.

for 루프를 사용해 보았습니다. 그 답은 거짓말이라고 생각합니다. 그리고 누군가가 charAt() 메소드를 설명 할 수있는 방법과 사용 방법이 있다면 좋을 것입니다. 가장 효율적인 방법은 다음과 같습니다.

for(i = 0; i < GuessWord.length(); i++) { 
    if (GuessWord.charAt(i) == guess2) { 
     mainword.replace(i,i,strGuess.toUpperCase()); 
    } 

그래서 이것을 기본으로 사용하고 해결할 수 있다면 해결할 수 있을까요? 또는 내가 생각하지 못한 것을 말해 줘.

+0

무엇 코드의 루프/수 charAt에 대한 블록 문제? –

+0

@ZackMacomber, 버튼을 클릭해도 아무런 변화가 없기 때문에 조건이 충족되지 않는다고 생각합니다. 사용자가 정확하게 – JavaProdigy

답변

3

좋은 질문입니다. 명확하게 반복되는 코드가 있으므로 재사용 가능한 모든 것을 어떻게 대체할까요? 사실, 모든 코드를 제거 할 수 있습니다.

전체 코드 블록을 한 줄로 바꿀 수 있습니다 (모든 단어에 해당).

String word = "TECHNOLOGY"; // This is the word the user must guess 
mainword = word.replaceAll("[^" + gletters + "]", "_"); 

이는 "이미 짐작되지 않은 편지"를 의미하고, 밑줄 문자 "_"으로 대체 정규식으로 replaceAll()를 사용합니다. 문자열은 변경되지 않으며 replaceAll() 메서드 은 수정 된 문자열을 반환합니다.이 메서드는 호출 된 String을 수정하지 않습니다.

다음 행동을 보여주는 몇 가지 테스트 코드는 다음과 같습니다

public static void main(String[] args) { 
    String word = "TECHNOLOGY"; // what the user must guess 
    StringBuilder gletters = new StringBuilder("GOTCHA"); // letters guessed 
    String mainword = word.replaceAll("[^" + gletters + "]", "_"); 
    System.out.println(mainword); 
} 

출력 :

T_CH_O_OG_ 
+0

을 word.replaceAll로 추측하면 문자 "word"는 무엇을 의미합니까? – JavaProdigy

+0

단어를 "코드"로 저장할 필요가 없습니다. 사용자가 추측해야하는 값을 보유하기 위해 "word"라는 String 변수를 만듭니다. – Bohemian

+0

나는 당신의 대답이 가장 도움이되고, 당신이 뭔가를하고 있다고 느낍니다. 자, System.out.print 대신 JLabel.setText (mainword)를 사용하겠습니다. 그게 효과가 있니? 그리고 나는 사용자가 추측 할 수있는 문자열을 StringBuilder로 설정했습니다. 특정 문자가 아닙니다. – JavaProdigy

관련 문제