자바 생성자에 대한 질문입니다.

조회수 1096회

안녕하세요! 아래의 코드는 생성자에서 조건에 맞는 날짜로 초기화 하지 않는 경우 isValid()를 통해 유효한 날짜인지 아닌지를 출력하는 코드 입니다.

예를 들어 2018년 2월 30일로 인스턴스를 생성한 경우 isValid()메서드를 실행하면 wrong이 출력됩니다.

제가 질문하고 싶은 것은 생성자에서 setYear setMonth setDay 순서대로 하면 원하는 값이 나오는데 setDay setMonth setYear순으로 하면 잘못된 값이 출력 됩니다.

생성자안에서 setter 메서드의 사용순서가 왜 결과에 영향을 미치는지 알 수 있을까요?

public class MyDate {
    private int day;
    private int month;
    private int year;
    boolean isValid=true;

    public MyDate(int day, int month, int year) {
        setYear(year);
        setMonth(month);
        setDay(day);
    }
    public int getDay() {
        return day;
    }


    public void setDay(int day) {
        switch(month) {
            case 1: case 3: case 5: case 7: case 8: case 10: case 12:
                if (day <0 || day >31) {
                    isValid = false;
                }
                else {
                    this.day = day;
                }
                break;
            case 4: case 6: case 9: case 11:
                if (day <0 || day >30) {
                    isValid = false;
                }
                else {
                    this.day = day;
                }
                break;
            case 2:

                    if (day <0 || day >28) {
                        isValid = false;
                    } 
                    else {
                        this.day = day;
                    }

                break;
            default:
                isValid = false;
        }
    }

    public int getMonth() {
        return month;
    }

    public void setMonth(int month) {
        if(month>=1 && month<=12)
            this.month = month;
        else
            isValid=false;
    }



    public int getYear() {
        return year;
    }

    public void setYear(int year) {

        this.year = year;
    }




    public String isValid() {
        if(isValid==true)
            return "Right";
        else
            return "Wrong";
    }
}

수정해서 올립니다! 아래는 위의 클래스에 대한 인스턴스를 생성하는 코드 입니다.

public class MyDateTest {

    public static void main(String[] args) {
        MyDate d1=new MyDate(30,2,2018);
        MyDate d2=new MyDate(30,3,2018);

        System.out.println("2018년 2월 30일이 나와야 함");
        System.out.println(d1.getYear());
        System.out.println(d1.getMonth());
        System.out.println(d1.getDay());
        System.out.println(d1.isValid());

        System.out.println("2018년 3월 30일이 나와야 함");
        System.out.println(d2.getYear());
        System.out.println(d2.getMonth());
        System.out.println(d2.getDay());
        System.out.println(d2.isValid());
    }

  • (•́ ✖ •̀)
    알 수 없는 사용자
  • 생성자를 호출(객체 생성하는)하는 코드도 올려주시기 바랍니다. 정영훈 2018.8.28 00:33

2 답변

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)