결과값이 왜 NaN으로 나올까요..?
힌트와 정답코드를 봐도 이해가 안 갑니다 ㅠㅠ

속도 변환하기

CODE Link

  1. public class Speed {
  2. public static void main (String[] args) {
  3. int meter = Integer.parseInt(args[0]);
  4. int sec = Integer.parseInt(args[1]);
  5. //1km = 1000m
  6. double kilo = meter/1000;
  7. double hour = sec/(60*60);
  8. //속도 = 거리/시간
  9. double speed = kilo/hour;
  10. System.out.printf("%.1f km/h", speed);
  11. }
  12. }

INPUT

  1. 100 18

OUPUT

  1. NaN km/h

kilo와 hour의 값을 중간 중간 확인해보세요.

아래 코드를 실행하면

  1. public class SpeedByJiyoung {
  2. public static void main(String[] args) {
  3. int meter = 100;
  4. int sec = 18;
  5. // 1km = 1000m
  6. double kilo = meter / 1000;
  7. System.out.println("kilo = " + kilo);
  8. // hour =
  9. double hour = sec / (60 * 60);
  10. System.out.println("hour = " + hour);
  11. //속도 = 거리/시간
  12. double speed = kilo / hour;
  13. System.out.printf("%.1f km/h", speed);
  14. }
  15. }

결과는 다음과 같습니다.

  1. kilo = 0.0
  2. hour = 0.0
  3. NaN km/h

여기서 좀 의아할겁니다. kilo 값이 왜 0.0이지? hour는 왜 또 0.0인가..? 싶을 건데요.

int 와 int의 연산은 int 입니다.

아래 코드에서 kilo의 값이 0.1이길 기대하겠지만, 소수점 이하가 버려진 0이 됩니다.

  1. double kilo = 100 / 1000;
  2. // double kilo = 0;
  3. // double kilo = 0.0;

그럼 어떻게 해야할까? meter와 sec를 double 변수로 선언하면 됩니다.

  1. public class SpeedByJiyoung {
  2. public static void main(String[] args) {
  3. double meter = 100;
  4. double sec = 18;
  5. // 1km = 1000m
  6. double kilo = meter / 1000;
  7. System.out.println("kilo = " + kilo);
  8. // hour =
  9. double hour = sec / (60 * 60);
  10. System.out.println("hour = " + hour);
  11. //속도 = 거리/시간
  12. double speed = kilo / hour;
  13. System.out.printf("%.1f km/h", speed);
  14. }
  15. }

수행 결과

  1. kilo = 0.1
  2. hour = 0.005
  3. 20.0 km/h

자세한 내용은 다음 링크를 확인해보세요. 타입과 형변환(https://cloudstudying.kr/lectures/70)

[Markdown Preview]