2012-01-04 8 views
4

저는 Java에서 새로운데, 저는 문자열에 대해 연구하고 문자열을 바꾸길 원합니다. 여기에 내 코드예기치 않은 유형 오류

String myStr = "abcdef"; String reversed = ""; 
for(int j=myStr.length()-1;j>=0;j--) { 
    myStr.charAt(j) += reversed; 
} 

입니다 그러나 그것은 나에게 오류 메시지를 제공합니다 :

****.java:14: error: unexpected type 
required: variable 
found: value 

을하지만 System.out.print(reversed)하여 인쇄 할 때, 그것은 제대로 reversed를 인쇄합니다. 변수와 가치의 차이점은 무엇입니까? 나에게 오류 메시지를 주더라도 정답을 줄 수있는 이유는 무엇입니까? 감사의 답변을 드리겠습니다.

+0

어디서 오류가 있습니까? –

+1

처음부터 컴파일하지 않으면 어떻게 인쇄 할 수 있습니까? –

+0

예기치 않은 유형의 빌드 출력과 함께 오류 메시지가 표시됩니다. – El3ctr0n1c4

답변

4

문제는 여기 :

myStr.charAt(j) += reversed; 

좌측 측 값이다. 변수가 아닙니다. 그래서 +=에 접속할 수 없습니다.


그것은 어려운 방법을 어떻게 학습의 목적을 패배하지만, 당신은 이런 식으로 작업을 수행 할 수 있습니다

myStr = new StringBuffer(myStr).reverse().toString(); 
+0

하하, 고마워 :)) – El3ctr0n1c4

0

+=은 가치가없는 변수에서 작동합니다. myStr.charAt(j)은 값을 반환하므로 해당 값에 +=을 사용할 수 없습니다. 그것은 reversed과 같은 변수 여야합니다. 예 :

reversed += myStr.substring(j, j+1); 
+0

방금 ​​오류 메시지를 표시했습니다. 그것은'int a = 5; 대신에'5 + = 1; a + = 1; 그러나, 나는 또한 실제 문제에 대한 해결책을 추가했다. –

+0

멋진 답변, 감사합니다 .. – El3ctr0n1c4

+1

당신은 오신 것을 환영합니다. –

2

reversed += new String(myStr.charAt(j)); 수 sould ... 예상치 못한 유형이 그 어떤 수 charAt (j)는

을 반환합니다.
+0

고마워, 방금 약간의 실수를했다. – El3ctr0n1c4

+0

오 ... 예 ... 루프 안에서 '... + = new String (...)'을 사용하는 것은 매우 나쁜 생각입니다. .. 대신 StringBuilder와 그 메소드 .append (char)를 사용하십시오. – A4L

1
String myStr = "abcdef"; 
String reversed = ""; 

for(int j = myStr.length()-1 ; j >= 0; j--) 
{ 
    reversed += myStr.CharAt(j); 
} 
+0

답변 해 주셔서 감사합니다. – El3ctr0n1c4

+1

언제든지 환영합니다. – Lion

0

원하는 것은 reversed += myStr.charAt(j)입니다. 변수에 값을 할당 할 수만 있습니다. myStr.charAt(j)은 변수가 아닙니다. 값을 반환하거나 char을 반환하는 식입니다.

StringBuilder을 사용하고 각 문자열을 StringBuilder에 추가해야합니다. 루프가 각 반복마다 새로운 String 인스턴스를 생성하기 때문에 이는 효율적이지 않습니다.

+0

나에게 좋은, 고마워! – El3ctr0n1c4

0

변수는 값을 저장할 수있는 장소입니다. 그들은 선언하고 사용하기 전에 값을 지정해야합니다 :

String reversed = ""; 

reversed이 값 ""을 할당 변수입니다. 할당 변수의 왼쪽에만 변수 (예 : =)가있을 수 있습니다. +=은 특별한 유형의 과제입니다. a += b;은 기본적으로 a = a + b;과 같습니다.

값은 표현식의 결과입니다. 표현식은 변수 참조 (reversed), 상수 (""), 메소드 호출 (myStr.charAt(0)) 및 조작 (a + b)과 같은 것입니다. 값은 과제의 오른쪽에있을 수 있습니다.

컴파일 오류가 발생했을 때 코드가 전혀 실행되지 않아야하는 이유가 무엇인지 확실하지 않습니다.

+0

예, 예상 한대로 올바른 문자열을 제공하지만 컴파일러의 자동 수정과 같은 오류가 있는지 혼란 스럽습니다. – El3ctr0n1c4

+1

이제는 생각해 보았습니다. 컴파일 오류로 인해 .class 파일의 출력이 차단 되었기 때문에 .class 파일을 덮어 쓰지 않았을 수 있습니다. 이전 버전이 제대로 작동했다면 실행 중일 수 있습니다. 입력 myStr을 변경하고 새로운 정답을 출력하는지 확인하십시오. – ILMTitan

+0

와우, 방금 입력을 변경하고 다시 빌드했습니다. 그래, 달리지 않고있어. 정말 고맙습니다.. – El3ctr0n1c4