자바 시작한지 얼마 안 된 초보에요..
swtich statement를 사용해서 프로그램을 짜던 도중 local variable is not initialized 라고 뜨는데
이거 어떻게 해결하나요..
switch statement 안에 있는 변수가 계속 초기화 안 된다고 뜨네요
여기다가 이런거 물어도 될려나?ㅋㅋㅋ
그니깐 만약
char a;
double b;
switch(a)
{
case 'A' :
b = 8.0;
break;
.
.
.
.
}
System.out.println(b);
이면 b가 초기화 안 된다고 계속 뜸 ㅜㅜ
JAVA에서 local 변수 초기화를 도대체 어떻게 하는거죠?
JavaEcl..(221.161)
2013-01-01 04:05
추천 0
댓글 12
다른 게시글
-
너님들의 2012년 잉여력을 측정하였다. [3]dot(124.197) | 13.01.01추천 0
-
"비주얼 스튜디오 2010에서" 공간의 차이? 어렵다 이거 왜 그런거죠? [4]초보자(112.153) | 13.01.01추천 0
-
형들 새해복 많이받아~ [1]산토리니(121.168) | 13.01.01추천 0
-
새해부터 또프로젝트를 하니 20대가아깝구나... [1]버려진로또(211.237) | 13.01.01추천 0
-
횽들....나 좆뉴빈데 좀 살려줘 LNK2019오류... [6]무만한딕(ssuessue) | 13.01.01추천 0
-
새해를 맞이하여 802.11 AC 는 새 무선랜의 표준이 됩니다. [2]때릴꺼야?(116.40) | 13.01.01추천 1
-
프갤형들 새해복많이받아!!!! [1]레니르트(nohseho2) | 13.01.01추천 0
-
死등은 나랑께흑묘(61.99) | 13.01.01추천 0
-
삼등에어로홍(aerohong) | 13.01.01추천 0
-
프로그래밍용 저렴한 노트북 추천좀요 [7]ㅠㅠ(121.139) | 13.01.01추천 0
초기화 하고 사용하셔야죠 당연 a 에다가 무슨 값이든 대입하고 쓰라는 뜻
char a인데 왜 A를 뭐 쩌라고 char a = \'A\' 이렇게 해야 되는거아님? a가 초기화가 안됬는데 case A뭐 어쩌라고
위에 둘 빠가사리들 본문은 읽냐? b가 초기화 안됐다니까 a같은 소리하고 자빠졌네. 모든 가능한 경로에서 b가 대입되지 않으니까 에러나는게지
zz// b를 switch statement 밖에서 초기화시켜야 하는거 같은데 그럴려면 어떻게 해야하는거죠??
double b = 0.0d; 이렇게 시작하면 됨. 여기서는 case에 일치하지 않을 때의 값으로 초기화하는게 편할듯.
맵돌이// 진짜 case 에 잋리하지 않는 값으로 초기화하니깐 값이 나오네요 ㄷㄷ 어떤 원리인지 설명해주실수 있나요 ㅜㅜ
잘 생각해보자...char 변수 a값이 \'a\'가 아니면...b에 아무값이 안들어가니..
변수 a값이 아닌경우에도 b에 값이 들어가게 하면 되지 디폴트 문 넣어서..
혹은 현재 코드를 if문으로 변환후 else문을 넣어서 else 문에서도 b에 특정 값을 넣으면 됨...혹은 아예 전역에서 선언시 b의 값을 초기화하던가
ㄴㅁㅇㅎ// 변수 a값이 아닌 경우에는 default 문으로 처리하는거는 알겠는데 왜 굳이 case에 일치하지 않는 값으로 b를 전역에서 초기화해야하는지 잘 모르겠네요..ㅜㅜㅜㅜ
일단 전역에서 초기화 해줘야하는지 모르겠다는 말씀부터 잘 이해가 가지 않네요. 혹시 스위치 케이스문 밖에서 변수가 선언되었다고 해서 그걸 전역이라고 하신 것이라면 잘못된 표현이라고 말씀 드리고 싶습니다. 저 코드는 어떤 함수의 내부에 작성되어 있을 것이라고 추측되는데, 로컬 변수는 초기화를 해 주지 않으면 사용자 (엔드유져를 말하는게 아님) 의 의도를 벗어난 의미없는 쓰레기 값이 변수에 들어가 있습니다. c에서는 위와 같은 경우에는.. 기억이 가물하긴 한데 워닝만 뜨고 에러는뜨지 않을 것입니다 이런 부분이 c의 유연함이라고 볼 수 있습니다. 저것과 같은것을 허용 해 주는 대신 문제가 생겼을 경우 사용자에게 책임을 묻게 되는것이죠. 하지만 '자바 같은 언어는 위와 같은 경우를 허용하지 않습니다.' 그래서 의도치 않게 터지는 경우는 덜 하겠지만 그만큼 유연성은 떨어진다고 볼 수 있습니다. 그리고 case 에 일치하는 값으로 변수 선언과 동시에 초기화를 해 주어도 별 문제는 없어 보입니다. 분기문을 통하여 프로그램이 실행될때 사용자가 의도한 값이 변수에 저장 될 것이기 때문입니다.
그리고 위에분들의 접근이 좀 틀렸다고 보이는 점은, 일단 에러 메시지를 잘 보면 local variable is not initialized라고 되어 있습니다. 보통 에러 메시지에 답이 다 나옵니다. 네. 로컬 변수가 초기화 되지 않았다는 거죠. 그래서 zz 님의 말씀은 틀렸다고 볼 수 있습니다. 대입과 초기화에 대한 개념이 아직 잘 잡히지 않으신거 같은데, 초기화가 된 변수라면 또 모든 분기에서 또 다른 값을 저장할 필요는 없습니다. 그리고 스위치 케이스 문에 들어간 상황에서 b에 무엇을 저장한다는 것은 이미 초기화가 아니고 대입인 것입니다. ㅁㄴㅇㅎ 님도 마찬가지로, b에 아무 값도 안들어가는게 문제가 아니라 (이미 들어 가 있습니다. 쓰레기값이죠.) 초기화가 되지 않은게 문제입니다. 또 zz 님과 ㅁㄴㅇㅎ 님의 논리대로라면, b 의 값을 바꿀 필요가 없는 상황에서도 특정 값을 대입 해 줘야 하는데, 그건 중복의 해악이라고도 볼 수 있습니다.