오답 노트/오답 노트-자바(Java)

24.10.29(화) "53대 이상입니다."

writingforever162 2024. 10. 30. 14:42

[문제]

public class SwitchPrac {
    public static void main(String[] args) {
       int age = 53;
       if (age>40&&age<50) {
          age = 40;
       }
       else if (age>30&&age<40) {
          age = 30;
       }
       else if (age>20&&age<30) {
          age = 20;
       }
       if (age<20) {
          System.out.println("20이라고 다시 연령대를 입력해주세요. 프로그램을 종료합니다.");
          System.exit(0);
       }
       switch (age) {
          case 20:
             System.out.println(age+"대입니다.『나의 하루는 4시 30분에 시작된다』책을 추천합니다.");
             break;
          case 30:
             System.out.println(age+"대입니다.『달팽이 식당』책을 추천합니다.");
             break;
          case 40:
             System.out.println(age+"대입니다.『돈은 좋지만 재테크는 겁나는 너에게』책을 추천합니다.");
             break;
          default:
             System.out.println(age+"대 이상입니다.『최재천의 공부』책을 추천합니다.");
             break;
       }
    }
}

50 이상은 전부 '50대 이상입니다.'라고 default 안에 작성한 문장이 출력되어야 하는데, 정수형 int 변수에 넣은 값이 그대로 출력되었다.

 

[원인]

if (age>50) {
    age = 50;
}

변수 age에 저장되는 값이 20 미만일 때는 프로그램이 종료되도록 설정하고, 40대까지는 if문과 else if문으로 age에 수정된 값이 저장되도록 설정했으나 50 이상인 값이 저장되는 상황에 맞는 조건을 추가하지 않았다.

 

[해결]

public class SwitchPrac {
    public static void main(String[] args) {
       int age = 53;
       if (age>50) {
          age = 50;
       }
       if (age>40&&age<50) {
          age = 40;
       }
       else if (age>30&&age<40) {
          age = 30;
       }
       else if (age>20&&age<30) {
          age = 20;
       }
       if (age<20) {
          System.out.println("20이라고 다시 연령대를 입력해주세요. 프로그램을 종료합니다.");
          System.exit(0);
       }
       switch (age) {
          case 20:
             System.out.println(age+"대입니다.『나의 하루는 4시 30분에 시작된다』책을 추천합니다.");
             break;
          case 30:
             System.out.println(age+"대입니다.『달팽이 식당』책을 추천합니다.");
             break;
          case 40:
             System.out.println(age+"대입니다.『돈은 좋지만 재테크는 겁나는 너에게』책을 추천합니다.");
             break;
          default:
             System.out.println(age+"대 이상입니다.『최재천의 공부』책을 추천합니다.");
             break;
       }
    }
}

예외 상황을 깜빡 잊으면 어떤 문제가 발생하는지 알 수 있었다. [원인]에서 발견한 코드를 추가로 작성한 결과, 의도한 대로 문장이 잘 출력되었다.