我知道这是不正确的,我无法弄清楚。我是否只需要更改整个方法?这个网站也说这个问题已经问过了,但是他们都帮不了我。
public Date(int cMonth, int cDate, int cYear, int cDayToDate, String cStrMonth, int dayYear){
if (cMonth = 01 && 12){
month = cMonth;
if (cMonth = 01,03,05,07,08,10,12){
if (cDate <= 31 ){
date = cDate;
}// end of if
}// end of if(cMonth) months with 31 days
else if(cMonth = 04, 06, 09, 11){
if (cDate <=30){
date = cDate;
}
}// end of cMonth month within 30 days
答案 0 :(得分:1)
最好使用switch语句。
public Date(int cMonth, int cDate, int cYear, int cDayToDate, String cStrMonth, int dayYear) {
switch (cMonth) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
if (cDate > 31)
throw new IllegalArgumentException();
break;
case 4:
case 6:
case 9:
case 11:
if (cDate > 30)
throw new IllegalArgumentException();
break;
case 2:
int days = isLeapYear(cYear) ? 29 : 28;
if (cDate > days)
throw new IllegalArgumentException();
break;
default:
throw new IllegalArgumentException();
}
date = cDate;
}
更接近您的要求,但是效率远不如我们
public Date(int cMonth, int cDate, int cYear, int cDayToDate, String cStrMonth, int dayYear) {
if (Arrays.asList(1, 3, 5, 7, 8, 10, 12).contains(cMonth)) {
if (cDate > 31)
throw new IllegalArgumentException();
} else if (Arrays.asList(4, 6, 9, 11).contains(cMonth)) {
if (cDate > 30)
throw new IllegalArgumentException();
} else if (cMonth == 2) {
int days = isLeapYear(cYear) ? 29 : 28;
if (cDate > days)
throw new IllegalArgumentException();
} else {
throw new IllegalArgumentException();
}
date = cDate;
}
以0
开头的btw数字为八进制,因此08
和09
无效。
答案 1 :(得分:0)
您可以使用List
来完成
List<Integer> monthList = new ArrayList<Integer>();
monthList.add(4);
monthList.add(6);
monthList.add(9);
monthList.add(11);
if(monthList.contains(cMonth)){
//do your work
}
答案 2 :(得分:0)
if (cMonth = 01 && 12)
要做到这一点,月份必须是1和12,我认为这是不可能的。我想您想检查一下月份是否在1到12之间,所以应该是
if (cMonth >= 1 && cMonth <= 12)
也是这样:
if (cMonth = 01,03,05,07,08,10,12){
不起作用,您应该尝试进行切换或简单地执行此操作(很多次输入):
if(cMonth == 1 || cMonth == 3 || cMonth == 5 || cMonth == 7 || cMonth == 8 || cMonth == 10 || cMonth == 12)
答案 3 :(得分:0)
有几个问题:
比较是通过==
而不是=
完成的。 =
是作业。
以0
和01
之类的02
开头的数字是八进制的。您可能想要1
,2
等十进制数字。
您期望&&
知道要与12
进行比较的内容,但是&&
不能那样工作。 &&
的两个操作数都需要指定要比较的内容。
&&
的意思是“与”。如果您想在cMonth
为1 或为12的情况下跟随分支,则需要||
(“ OR”)。
cMonth = 04, 06, 09, 11
还需要您明确说明要使用06
,09
和11
进行的操作。
因此,最外面的if
必须是:
public Date(int cMonth, int cDate, int cYear, int cDayToDate, String cStrMonth, int dayYear){
if (cMonth == 1 || cMonth == 12){
// ...
}
else if(cMonth == 4 || cMonth == 6 || cMonth == 9 || cMonth == 11) {
// ...
}
// ...
}
我将把分支的内部留给您,应用上面的注释列表。
另外:您可能会考虑使用switch
语句,而不是所有这些cMonth ==
比较。
public Date(int cMonth, int cDate, int cYear, int cDayToDate, String cStrMonth, int dayYear){
switch (cMonth) {
case 1:
case 12:
// ...
break;
case 4:
case 6:
case 9:
case 11:
// ...
break;
}
// ...
}
答案 4 :(得分:0)
Set<Integer> set1 = new HashSet<Integer>(new Integer[]{1,3,5,7,8,10,12});
Set<Integer> set2 = new HashSet<Integer>(new Integer[]{4,6,9,11});
if(cMonth == 1 || cMonth == 12){
if(set1.contains(cMonth)){
if (cDate <= 31 ){
date = cDate;
}
}
else if(set2.contains(cMonth)){
if (cDate <= 30 ){
date = cDate;
}
}
}