2014-06-08 3 views
0

Java에 익숙하지 않습니다. 어리석은 질문 인 경우 죄송합니다. 루프 내부에서 두 개의 변수에 새로운 값을 할당하고 싶습니다.하지만 작동하지 않습니다. 컴파일을 시도 할 때 "로컬 변수 newString이 초기화되지 않았을 수 있습니다"라는 오류 메시지가 나타납니다.while 루프 내에 변수를 설정할 수 없습니다.

public class Test { 

    public static String example() { 
     String first; 
     String second; 
     String newString; 
     int start = 1; 

     while (start<5) { 
      if (start<4) { 
       first = "hello"; 
       second = "world"; 
       newString = first + second; 
      } 
      start += 1; 
     } 
     return newString; 
    } 

    public static void main(String[] args) { 
      System.out.println(example()); 
    } 
} 
+6

''지역 변수 newString은 초기화되지 않았을 수 있습니다. '': 따라서 초기화하십시오 :'String newString = "";' –

답변

1

, 컴파일러는 값이 그 변수에 할당 될 수 있는지 확인해야합니다 (귀하의 경우 :

간단한 해결 방법은 문자열을 초기화됩니다 newString).

어떤 점에서 start < 4이라는 조건이 true이 될지는 꽤 분명하지만 컴파일러는이를 이해할만큼 지능적이지 않습니다. 즉, 값만있는 변수 만 반환해야한다는 것을 의미합니다. 당신이 당신의 방법은 결코 오류를 찾는 경우에 까다로운 일이 될 수있는, null을 반환하지 않습니다 것을 확신이 경우

String newString = ""; 

:

는 방법의 목적에 따라 다음 기회를. 당신이 당신의 방법은 null 값을 반환 할 수 있도록하려면

또 다른 기회

String newString = null; 

입니다.

이 경우 분명히 if -block을 입력하고 변수 newString에 값을 할당하면 다른 경우에는 분명하지 않으므로 메서드 반환을 허용할지 여부를 결정해야합니다 null 값 또는 아닙니다.

1

가 반환되기 전에 newString 적 초기화됩니다 경우 컴파일러는 모르는 때문에이 오류가 발생하는 예를 들면 다음과 같습니다이다. 당신start<5start<4 모두 true을하고, 따라서 실행하는 것을 알고 있지만

, 컴파일러는 컴파일시 계산 이러한 유형의 수행하지 않습니다. 따라서, 아는 모든 것에 대해 해당 문은 실행되지 않으므로 newString이 초기화되기 전에 반환 될 수 있습니다.

따라서이 오류가 발생하지 않도록 신고하면 초기화해야합니다 (예 : null).

1

모든 로컬 변수를 처음 읽으려면 먼저 Java에서 규칙을 초기화해야합니다. 반환 값으로 newString을 사용하고 있습니다. 이것은 읽기 작업입니다.
newString에 값을 할당하더라도 조건부 상황 (start<5 && start<4)에서 값이 지정됩니다. 컴파일 시간에 컴파일러는 코드를 실행 한 결과를 알지 못하며 보수적으로이 상황에 대해 불평합니다.

당신이 방법에서 결과 변수를 반환하는
String newString = ""; 
관련 문제