자바 기초에 있어서...
떠나간그녀
class Aaa{
public static void mail(String arg [] )
{
intbb1 = 145;
intbb2= 185;
if (bb1bb2)
if (bb1 bb2)
System.out.println(bb1= +bb1);
else
if(bb2100)
System.out.println(bb2=+ bb2);
System.out.println(well done);
}
}
일부러 {}를 생략해보았습니다. 그런데 else와 if가 인식을 어떻게 해여 실행되었는지 모르겠습니다.
첨 생각엔
bb2= 185
well done 이라고 나올거라고 생각했었는데, 이것을 실행하면은 well done 이라고 나옵니다.
실행 경로하고 어떻게 이런 값이 나왔는지 가르쳐주세요~!!
-
김자영
감사합니다.
-
제미니
참고로 말씀드리자면 이 문제에 대해서 고민 안하셔도 될거같아요 중괄호를 사용하지 않았을떄 중복되는 if문에서 프로그래머가 의도하지 않은 결과가 나올수 있다는걸 알려주려고 하는거 같구요.. 작성된 소스코드가 모호한 문법이기 떄문에.. 발생하는 문제이고 일반적으로 저런 상황일떄 가장 가까운 if에 else를 붙여서 구문분석을 하게 되는걸로 알고있습니다 소스를 작성한 사람은 자신의 의도에 맞게 이해를 할수있지만 그 코드를 분석하는 컴파일러는 의도를 모르기떄문
-
핫블루
제가 알고있는게 맞는지는 정확하지 않지만 전공수업때 다루었던 문제라...답변을 드리자면 뎅글링 엘스문제인거 같네요 중괄호가 빠짐으로서 다음에 나오는 else가 맨 처음의 if에 붙는지 그다음 if에 붙는지 명확하지 않기 떄문에 발생하는 문제이고 저런 상황이 발생했을떄는 어떤 명확한 규칙이 정해져있다기 보다는 각각의 컴파일러에서 적용하는 방식에 따라 결과가 달라질거 같네요 자세한건 컴파일러 구조론 같은 책을 보시면 이해하실수 있을거에요
-
한별나라
첫 번째 if문이 거짓이니 else if 문이 실행되는 것이 아닌가요? 아직 잘 모르겟습니다.
-
가림새
if (bb1bb2)
이 항목이 거짓이니 뒤에 이어지는
if (bb1 bb2)
System.out.println(\bb1=\ +bb1);
else
if(bb2100)
System.out.println(\bb2=\+ bb2);
이 항목은 실행이 되지 않겠지요?