[자바초보] 조건문 관련 너무 이해가 안되요...
안녕하세요 자바 독학한지 얼마 안된 왕초보 학생입니다.
class Ch5Circle { public static final int INVALID_DIMENSION = 666; private double radius; public Ch5Circle(double r) { setRadius(r); } public double getArea() { double result = INVALID_DIMENSION; if (isRadiusValid()) { result = Math.PI*radius*radius; } return result; } public double getCircumference() { double result = INVALID_DIMENSION; if (isRadiusValid()) { result = 2.0*Math.PI*radius; } return result; } public double getDiameter() { double diameter = INVALID_DIMENSION; if (isRadiusValid()) { diameter = 2.0*radius; } return diameter; } public double getRadius() { return radius; } public void setDiameter(double d) { if ( d > 0 ) { setRadius(d/2.0); } else { setRadius(INVALID_DIMENSION); } } public void setRadius(double r) { if (r>0) { radius = r; } else { radius = INVALID_DIMENSION; } } private boolean isRadiusValid() { return radius != INVALID_DIMENSION; } }
책에서 조건문 단락을 이제 막 들어갔는데요 거기에 나온 샘플 프로그램의 한 service class입니다.
이 프로그램은 이용자로부터 반지름 radius를 입력받아 원의 넓이와 둘레길이를 출력해주는 프로그램인데요.
프로그램을 실행시켜 반지름을 제대로 입력하면 원넓이,원둘레가 잘 계산되서 나오고
반지름을 -44, 0 같이 이상하게 입력하면 원넓이,원둘레 모두 -1.0으로 나오게 됩니다.
그런데 잘 이해가 안가는 부분이 있는데요
맨 밑에 isRadiusValid()매소드에 보면
return radius != INVALID_DIMENSION;
이때 INVALID_DIMENSION이 -1이니까
입력된 반지름이 -1이 아니면 참, -1을 입력받으면 거짓을 출력하는 거잖아요
(여기를 잘못 이해한거 같은데 어디서 잘못 이해했는지 모르겠어요;;)
그러니까 사용자가 반지름으로 -1을 입력하면 프로그램은 원넓이 = -1, 원둘레 = -1로 계산하고
반지름으로 -1이 아닌 숫자를 입력하면 프로그램은 원넓이, 원둘레를 원래 계산하던 방식으로 계산한다는 말 아닌가요?
즉 반지름을 양수로 잘 입력하면 잘 계산되고
-1을 입력하면 원넓이,원둘레 모두 -1이 리턴되고
-14같이 -1이 아닌 음수를 입력하면 프로그램이 원넓이로 -564.xxx같이 뚱딴지같은 결과를 출력한다는 말이 아닌가요?
그런데 왜 실행시켜보면 -1이나 -14같이 엉뚱한 반지름값을 입력하면 모두 원넓이=-1, 원둘레=-1이 리턴될까요?
지금 참, 거짓을 판단하는 statement가 "반지름 radius가 -1의 값을 가지지 않는다"이잖아요........
제가 어디서 오류를 범했는지, 프로그램이 왜 저렇게 실행되는지 설명 부탁드립니다
우선, 소스코드에 의하면
우선, 소스코드에 의하면 INVALID_DIMENSION의 값은 -1이 아니고 666 입니다.
그러니까 -1이 출력되는게 아니라 666이 출력되어야 하는데...
위에 소스코드 제대로 올리신거 맞나요?
isRadiusValid() 함수가 하는 일이 radius의 범위 검사가 아닙니다.
그냥 단지 radius가 INVALID_DIMENSION이 아닌지만 체크할 뿐.
실질적인 radius의 범위 검사(음수인지 아닌지)는
setRadius()에서 이루어 집니다.
setRadius()에서는
넘겨받은 값이 양수이면 그대로 그걸 radius로 사용하고,
음수이면 radius에 INVALID_DIMENSION를 대입하네요.
앗 숫자를 잘못적었네요..
-1이 아니라 666인데 잘못 적었네요;;
아, 답변을 보니까 이제야 코드가 이해가 되네요.. 정말 감사합니다!
댓글 달기