嗨,我试图让我的if语句等于一个以上的数字

时间:2018-09-28 10:42:03

标签: java if-statement

我知道这是不正确的,我无法弄清楚。我是否只需要更改整个方法?这个网站也说这个问题已经问过了,但是他们都帮不了我。

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

5 个答案:

答案 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数字为八进制,因此0809无效。

答案 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)

有几个问题:

  • 比较是通过==而不是=完成的。 =是作业。

  • 001之类的02开头的数字是八进制的。您可能想要12等十进制数字。

  • 您期望&&知道要与12进行比较的内容,但是&&不能那样工作。 &&两个操作数都需要指定要比较的内容。

  • &&的意思是“与”。如果您想在cMonth为1 为12的情况下跟随分支,则需要||(“ OR”)。

  • cMonth = 04, 06, 09, 11还需要您明确说明要使用060911进行的操作。

因此,最外面的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;
            }
        }
    }