bool isValidDate(int month, int day, int year) {
if(isLeapYear(year)){
if(year >= 1752 && month >= 9 && day >= 13){
if((month == 9 || month == 4 || month == 6 || month == 11) && (day <= 30)){
return true;
}
else if((month == 2) && (day <= 29)){
return true;
}
else if(((month >= 1 && month <= 3) || (month >=5 && month <= 8) || month == 10 || month == 12) && (day <= 31)){
return true;
}
else{
return false;
}
}
}
else {
if(year >= 1752 && month >= 9 && day >= 13){
if((month == 9 || month == 4 || month == 6 || month == 11) && (day <= 30)){
return true;
}
else if((month == 2) && (day <= 28)){
return true;
}
else if(((month >= 1 && month <= 3) || (month >=5 && month <= 8) || month == 10 || month == 12) && (day <= 31)){
return true;
}
else{
return false;
}
}
}
}
私はなぜこのようなエラーが出るのかを知ることはできません。ルートが2つしかない可能性があるので、戻り値が間違いないことを意味します。助けてください!
回答:
回答№1は1戻り値がない場合は、可能なルートが1つあります。 if(year >= 1752 && month >= 9 && day >= 13)
真と評価されません。
else{
if(year >= 1752 && month >= 9 && day >= 13){
if((month == 9 || month == 4 || month == 6 || month == 11) && (day <= 30)){
return true;
}
else if((month == 2) && (day <= 28)){
return true;
}
else if(((month >= 1 && month <= 3) || (month >=5 && month <= 8) || month == 10 || month == 12) && (day <= 31)){
return true;
}
else{
return false;
}
}
// return here
}
回答№2の場合は1
次の場合にはこれには「else」はありません:
if(year >= 1752 && month >= 9 && day >= 13){
回答№3の場合は1
ない return
関数の最後にif (year >= 1752 && month >= 9 && day >= 13)
は false
.
なお、上記 if
あなたが期待どおりに動作しない場合があります。おそらく、あなたは1752年9月13日以降有効な日付として扱いたいと思っています。しかし、9月より前の日付は有効ではないとみなします。あなたは関数の始めにしたいかもしれません:
if (year < 1752)
return false;
else if (year == 1752) {
if (month < 9 || (month == 9 && day < 13))
return false;
}
ところで、うるう年とうるう年のすべてのブロックを複製する必要はありません。チェック isLeapYear()
もしも month == 2