오답 노트-자바(Java)

24.10.29(화) "31세도 40대, 25세도 40대입니다."

writingforever162 2024. 10. 30. 15:16

[문제]

public class SwitchPrac {
    public static void main(String[] args) {
       int age = 31;
       if (age>50) {
          age = 50;
       }
       if (age>40&&age<50) {
          age = 40;
       }
       else if (age>30&&age<40) {
          age = 40;
       }
       else if (age>20&&age<30) {
          age = 40;
       }
       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;
       }
    }
}

오답 노트를 작성하는 지금이야 마음이 편하지만, 당시에는 원인이 바로 눈에 띄지 않아 식은땀이 흘렀다. 분명 if문과 else if문까지 썼는데 대체 어떤 코드를 잘못 작성한 걸까, 머리에 쥐가 날 정도였다.

 

[원인]

if (age>40&&age<50) {
    age = 40;
}
else if (age>30&&age<40) {
    age = 40;
}
else if (age>20&&age<30) {
    age = 40;
}

원인은 if문을 복사해서 아래에 붙여 넣은 3가지 중 2가지만 고치고 넘어간 데에 있었다. if를 else if로 고치고, 소괄호 안에 있는 조건식까지 숫자를 바꿔쓰기까지는 잘했는데 'age = 40;'의 40을 그대로 놔두었다. else if라고 써서 문제가 생긴 건지 뚫어지도록 관찰했다가 원인을 깨닫는 순간, 이 경험은 무조건 기록해 두기로 마음먹었다. 앞으로 몇 줄인지 셀 엄두조차 나지 않을 코드를 다룰 테고, 일일이 코드를 작성하기보다 복사 및 붙여넣기로 끝낼 때도 종종 있을 텐데 그럴 때마다 발생하기 쉬운 실수 같았다. 원인을 찾았을 당시 약간 허무감이 밀려오긴 했으나, 일찍 깨달아서 다행이라는 안도감이 더 크게 왔다.

 

[해결]

public class SwitchPrac {
    public static void main(String[] args) {
       int age = 25;
       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;
       }
    }
}

앞으로 코드를 복사해서 붙여 넣을 때는 각 줄마다 바꿔야 할 부분을 모두 바꿨는지 꼼꼼하게 검토해야겠다고 다짐했다.