먼저 당신이 당신의 코드를 단순화 할 수 있습니다 무엇인지 알고 감사하겠습니다 like :
public void setMonth() {
int input = 0;
do {
input = scan.nextInt();
} while(input <= 0 || input >= 13)
this.month = input;
}
이 외에도이 기능을 두 가지 기능으로 구분할 수 있습니다. 세터는 값을 설정해야합니다.
public void setMonth(int month) {
if(month > 0 && month <= 12) {
this.month = month;
} else {
throw new IllegalArgumentException("Month has to be a value between 1 and 12 inclusively. Actual value was :" + month);
}
}
public void readMonth() {
int input = 0;
do {
input = scan.nextInt();
} while(input <= 0 || input >= 13)
setMonth(input);
}
ChiefTwoPencils에서 제안한대로 더 세터를 추가 클래스로 추출 할 수 있습니다. 따라서 사용자 입력과 데이터를 훨씬 더 분리합니다.
class MonthDataHolder {
private int month;
public MonthDataHolder(int month) {
setMonth(month);
}
public void setMonth(int month) {
if(isValidMonthValue(month)) {
this.month = month;
} else {
throw new IllegalArgumentException("Month has to be a value between 1 and 12 inclusively. Actual value was :" + month);
}
}
private boolean isValidMonthValue(month) {
return month >= 1 || month <= 12;
}
}
class InputReader {
public MonthDataHolder readMonth() {
int input = 0;
do {
input = scan.nextInt();
} while(input <= 0 || input >= 13)
return new MonthDataHolder(input);
}
}
제안 사항 : 설정자에 사용자 입력을하지 마십시오. 입력기를 설정자에게 전달하여 입력의 유효성을 검사하면됩니다. 메소드 밖에서 입력하라는 메시지. – Li357
이 메소드를 세 단계로 나누어야합니다. 1. getInput() 2. validate() 3. setValue(). 현재이 방법은 선호하지 않는 3 가지 책임을 수행합니다. – techtrainer
표시 방법은 Java 컨텍스트에서 일반적으로 "설정자"라고하는 것이 아닙니다. – hyde