Привет, я пытаюсь, чтобы мой оператор if был больше одного числа - PullRequest
0 голосов
/ 28 сентября 2018

Я знаю, что это неправильно, и я не могу понять это.Мне просто нужно изменить весь мой метод?На этом сайте также сказано, что этот вопрос уже задавался, но никто из них мне не помог.

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 голосов
/ 28 сентября 2018
    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;
            }
        }
    }
0 голосов
/ 28 сентября 2018

Есть несколько проблем:

  • Сравнение выполняется с ==, а не =.= - это присвоение.

  • Числа с ведущими 0 s, такие как 01 и 02, и такие, которые являются восьмеричными.Вы, вероятно, хотели 1, 2 и такие, которые являются десятичными.

  • Вы ожидаете, что && узнает, с чем вы хотите сравнить 12, но && не работает таким образом. Оба операнда для && должны указывать то, что вы сравниваете.

  • && означает «И».Если вы хотите следовать за веткой, если cMonth равно 1 или , если это 12, вам нужно || ("ИЛИ").

  • 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;
    }
    // ...
}
0 голосов
/ 28 сентября 2018

Для этого лучше всего подойдет оператор 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, восьмеричны, поэтому 08 и09 не действительны.

0 голосов
/ 28 сентября 2018
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)
0 голосов
/ 28 сентября 2018

Вы можете использовать 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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...