protect0   1년 전

System.out.println("Case #"+(i+1)+": " + A + " + " + B + " = "+ AA[i]);

이 문장을 다른 곳으로 안 옮기고 정상적으로 출력하고 싶은데

오류 내용 보니까 A 와 B가 지역 변수라서 안된다고 하는데 어떻게 해야 될까요?

djm03178   1년 전

오류 내용은 원문 그대로를 올려주시는 게 좋습니다. 해석하신 내용이 오류의 핵심을 충분히 반영하지 못하고 있습니다.

해당 에러가 발생하는 원인은 A와 B가 "초기화되지 않았을 수도 있기 때문"입니다. 변수는 선언한 것 자체로는 초기화가 되지 않습니다. 물론, 이 문제의 입력 제한상 A와 B는 반드시 15, 16번째 줄에서 대입이 될 것이지만, 컴파일러는 이 조건을 알지 못하기 때문에 testCase가 0보다 작거나 같아서 루프가 한 번도 돌지 못하는 상황도 고려해야 합니다. 이 경우 A와 B에 아무것도 대입되지 않은 채로 이 값을 사용하려 할 수 있고, 자바 가상 머신은 이런 경우를 결코 원하지 않기 때문에 컴파일 단계에서 미리 차단하는 것입니다.

그리고 A와 B를 처음에 초기화한다고 해도 이 코드는 의도하신 대로 동작하지 않습니다. 원하시는 출력은 i번 케이스에서 입력된 A와 B 값을 출력하는 것이지만, 이 코드는 하나의 A와 B에 계속해서 값을 덮어쓰기 때문에 실제로 24번째 줄에서 출력되는 건 가장 마지막 케이스에서 입력된 A와 B입니다. 답을 AA라는 배열에 저장해서 케이스마다 따로따로 저장하셨듯이, A와 B도 따로따로 저장해야 합니다.

그보다 더 좋은 방법은, 그냥 한 케이스 입력받고 그에 대한 답을 곧바로 출력해버리는 것입니다. 어딘가에 담아두었다가 나중에 몰아서 출력할 필요가 없습니다.

chldn323   1년 전

지역 변수라서 안 되는 게 아니고 초기화되지 않아서 안 되는 거 같네요.

컴퓨터는 testCase<1 일 때 가운데 for문이 실행이 안 되면 A, B에 값이 없다고 생각합니다.

이 문제는 int A=0; int B=0; 이런 식으로 초기화 해주면 실행 가능합니다.

protect0   1년 전

답변 달아주셔서 너무 감사합니다 이해가 잘 되었습니다ㅎㅎ 

댓글을 작성하려면 로그인해야 합니다.