まず何であるかを知っていただければと思います
public void setMonth() {
int input = 0;
do {
input = scan.nextInt();
} while(input <= 0 || input >= 13)
this.month = input;
}
これに加えて、これを2つの機能に分けます。設定者は値を設定するだけです。
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
このメソッドを3つのステップに分割する必要があります。1. getInput()2. validate()3. setValue()。現在このメソッドは3つの責任を果たしていますが、これは好ましくありません。 – techtrainer
あなたが表示する方法は、一般的にJavaコンテキストでは「セッター」と呼ばれるものではありません。 – hyde