2016-11-02 4 views
2

해결 방법에 대한 해결 방법으로 String을 생성하려고합니다.해결 방법에 대한 단어 힌트로 문자열을 생성하려고 시도했습니다.

이것은 힌트를 생성하는 데 사용되는 것이지만 이러한 오류를 수정하는 방법을 잘 모르겠습니다. 추측에 올바른 문자가 올바른 위치에 추측되면 힌트에 문자가 표시됩니다. 단어에 문자가 있으면 해당 위치에 "+"가 표시됩니다. 문자가 단어에 없으면 "*"가 반환됩니다.

예를 들어, 퍼즐 솔루션이 "HARPS"이고 추측이 "HELLO"이면 힌트가 "H ****"입니다. 마찬가지로 추측이 "HEART"이면 힌트는 "H * ++ *"가됩니다.

또한 wordLength는 솔루션의 문자 양을 제공하는 다른 방법으로 생성됩니다.

public String getHint(String theGuess) { 
    for (int index = 0; index < wordLength; index++) { 
     if **(theGuess.charAt(index)** = solution.charAt(index)) { 
      hint.**setCharAt**(index, theGuess.charAt(index)); 
     } else if **(theGuess.charAt(index)** = solution.indexOf(solution)) { 
      **hint.setCharAt**(index, "+"); 
     } else { 
      **hint.setCharAt**(index, "*"); 
     } 
    } 
    return hint; 
} 

오류는 이중 별표입니다. (theGuess.charAt (색인) 이클립스

다음 오류 메시지가 표시된다. 할당의 좌변이 가변 있어야

을 hint.setCharAt 들어

, String 유형에 대한 정의되지

메소드 setCharAt (INT, 문자열)

: 그것은 나에게 말한다.
+0

어떤 오류 메시지가 나타 납니까? 현재 어떤 결과물을 얻고 있습니까? –

+0

For theGuess.charAt (index) Eclipse는 "할당의 왼쪽은 변수 여야합니다."hint.setCharAt의 경우 "setCharAt (int, String) 메서드는 String 유형에 대해 정의되지 않았습니다. . " – Bvare

답변

1

고정 될 필요가 코드에서 많은 문제가 있습니다 : 당신이 변수에 새 값을 할당 할 때

  1. = 사용됩니다. 두 값을 비교할 때 ==을 사용하려고합니다.
  2. setCharAt()은 문자열이 아닌 StringBuilder의 메소드입니다. 이 간단한 솔루션은 +=을 사용하여 새 charater를 String으로 concatinate하는 것입니다. 당신은 모두 StringBuilder를 사용하려면
    다음 부분은 수정 될 필요 이
    • setCharAt()의 두 번째 매개 변수는 문자가 아닌 문자열이어야합니다. 및 "+" 주위의 큰 따옴표를 작은 따옴표로 변경해야 '*'
    • setCharAt()이 특정 색인의 문자를 바꿉니다.StringBuilder가 바꾸려는 인덱스 위치보다 더 짧으면 오류가 발생합니다. 바로 StringBuilder를
      hint = new StringBuilder("*****")과 같은 올바른 길이의 문자열로 설정하여이 문제를 해결할 수 있습니다.
      항상 빌더의 끝을 추가하기 때문에 setCharAt() 대신 append()을 사용해야하며이 인덱스 위치 문제에 대해 걱정할 필요가 없습니다.
  3. (theGuess.charAt(index) == solution.indexOf(solution)solution 문자열 전체에 현재 문자가 포함되어 있는지 검색하지 않습니다. 대신 indexOf()을 사용하여 문자열에 문자가 포함되어 있는지 확인할 수 있습니다. 이 링크는 도움이 될 수 있습니다 : 여기

How can I check if a single character appears in a string? 코드의 작업으로 완벽한 프로그램입니다 :

public class HelloWorld 
{ 
    public static void main(String[] args) 
    { 
     OtherClass myObject = new OtherClass(); 
     System.out.print(myObject.getHint("HEART")); 
    } 
} 

옵션 1-+=를 사용하여 문자열에 추가

public class OtherClass 
{ 
    private String solution = "HARPS"; 
    private int wordLength = 5; 

    public String getHint(String theGuess) { 
     String hint = ""; 

     for (int index = 0; index < wordLength; index++) { 
      if (theGuess.charAt(index) == solution.charAt(index)) { 
       hint += theGuess.charAt(index); 
      } else if (solution.indexOf(theGuess.charAt(index)) > 0) { 
       hint += "+"; 
      } else { 
       hint += "*"; 
      } 
     } 

     return hint; 
    } 
} 

옵션 2 - StringBuilder 사용 :

public class OtherClass 
{ 
    private StringBuilder hint; 
    private String solution = "HARPS"; 
    private int wordLength = 5; 

    public String getHint(String theGuess) { 
     hint = new StringBuilder(); 

     for (int index = 0; index < wordLength; index++) { 
      if (theGuess.charAt(index) == solution.charAt(index)) { 
       hint.append(theGuess.charAt(index)); 
      } else if(solution.indexOf(theGuess.charAt(index)) > 0) { 
       hint.append('+'); 
      } else { 
       hint.append('*'); 
      } 
     } 

     return hint.toString();  
    } 
} 
+0

그 문자열을 연결하는 것은 그것이 그 추측의 힌트 만 보여주기 위해 필요하기 때문에 작동하지 않습니다. 이전의 모든 추측은 아닙니다. –

+0

@ sub6resources'getHint()'메소드 내에서'hint' 변수를 움직여 걱정을 수정했습니다. 이제는 getHint() 메서드가 호출 될 때마다 빈 문자열로 재설정됩니다. StringBuilder도 사용할 수 있지만, OP는 간단한 초보자 용 솔루션을 원하는 것처럼 보입니다. –

+0

네, 그게 효과가 있습니다. –

0

이 코드는 작동합니다 :

public String getHint(String theGuess) { 
    StringBuilder hintBuilder = new StringBuilder(hint); 
    for (int index = 0; index < wordLength; index++) { 
     if (theGuess.charAt(index) == solution.charAt(index)) { 
      hintBuilder.setCharAt(index, theGuess.charAt(index)); 

     } else if(theGuess.charAt(index) == solution.indexOf(string)) { 
      hintBuilder.setCharAt(index, "+"); 
     } else { 
      hintBuilder.setCharAt(index, "*"); 
     } 
    } 
    return hintBuilder; 
} 

는 기본적으로, 당신은 그들이 구축되면 그들이이 변경 될 수 없음을 의미 문자열은 불변 때문에 '모두 StringBuilder'를 사용합니다. 또한 두 값을 비교할 때 =이 아니라 == 또는 ===을 사용하여 비교하십시오.

내가 문자열 자바에서 불변의 것을 잊었

를 업데이트하고 작동합니다 수 있도록 코드를 업데이트했다.

+1

아직도 힌트입니다. 문자 (변수)는 변수가 아니므로 여전히 오류가 발생합니다. 그렇지 않으면 좋게 보입니다. – Bvare

+0

아, 예, 자바 문자열을 만든 후 변경할 수 없다는 사실을 잊었습니다. 문자를 바꾼 새 문자열을 만들어야합니다. 잠시 후에 새 코드로 업데이트하겠습니다. –

+0

메서드 호출에 할당 할 수 없기 때문에이 코드는 작동하지 않습니다. –

관련 문제