если еще - если не работает - PullRequest
1 голос
/ 28 июня 2011

У меня есть блок if else-if, как показано ниже, но он работает только наполовину. Часть if работает так же, как и первый if-else. Но последние два оператора if-else никогда не выполняются даже в тех случаях, когда они должны принимать значение true. Может кто-нибудь сказать мне, что я здесь делаю не так?

//Getting current date and time
Calendar c = Calendar.getInstance();
int day = c.get(Calendar.DAY_OF_MONTH);                     
int month = c.get(Calendar.MONTH);
int year = c.get(Calendar.YEAR);
int hour = c.get(Calendar.HOUR_OF_DAY);
int minute = c.get(Calendar.MINUTE);

//Getting user-entered date and time values.
String[] selected_date_string = date.getText().toString().split("-");
int selected_month = Integer.parseInt(selected_date_string[0]);
int selected_day = Integer.parseInt(selected_date_string[1]);
int selected_year = Integer.parseInt(selected_date_string[2]);
String[] selected_time_string = time.getText().toString().split(":");
int selected_hour = Integer.parseInt(selected_time_string[0]);
int selected_minute = Integer.parseInt(selected_time_string[1]);

boolean has_error = false;
int error = -1;

//PROBLEM AREA
if (selected_year < year) {
    error = 1;
} else if ((selected_year == year) && (selected_month < month)) {
    error = 2;
} else if ((selected_year == year) && (selected_month == month)) {//this part doesnt work no matter what I do!
    error = 3;
} else if ((selected_year == year) && (selected_month == month) && (selected_day == day)) //this part too!
    if (selected_hour < hour) 
        error = 4;

Заранее спасибо!

Ответы [ 7 ]

7 голосов
/ 28 июня 2011

Обычно мы забываем, что MONTH в Calendar основано на нуле, другими словами: значение для января составляет 0, а не 1, как мы ожидаем ..

Возможно, вам придется уменьшить selected_month ...


используйте эту строку в вашем коде:

int selected_month = Integer.parseInt(selected_date_string[0]) - 1;
4 голосов
/ 28 июня 2011

У вас есть дублирующее утверждение:

else if ((selected_year == year) && (selected_month == month))

Последнее никогда не будет оцениваться, потому что предыдущее уже его заберет.Я знаю, что второй более конкретен, но это не имеет значения.Например, если ваши годы совпадают, а месяцы совпадают, не будет иметь значения, что ваши дни тоже совпадают, потому что первое утверждение, которое становится истинным, - это ваше заявление error = 3 else if.из двух нижних утверждений оцениваются, я думаю, что @Andreas_D на это, когда он упоминает, что месяц является нулевым значением.Возможно, это утверждение работает, но не так, как вы ожидали.

3 голосов
/ 28 июня 2011

Класс календаря в Java возвращает 0-11 для месяца,

, поэтому, если текущий месяц - январь, он возвращает 0

для 1 февраля и т. Д.,

дляДекабрь возвращает 11

, поэтому ваше условие if никогда не будет равно

отметьте его

прокомментируйте или ответьте, если возникнет какая-либо проблема относительно него

2 голосов
/ 28 июня 2011

Вы должны поставить наиболее конкретное условие в качестве первого, если. Последнее, если не может быть выполнено, так как его условие является более конкретным, чем 3-е ((selected_year == год) && (selected_month == месяц)), но эта первая часть возвращает true для 3-й перед проверкой последней, поэтому вы никогда не получите последнее, если выполнить, даже если оно верно для последней части (selected_day == день).

Если поставить это условие первым, оно будет проверено.

1 голос
/ 05 октября 2017

Попробуйте.

int month = c.get(Calendar.MONTH)+1;
1 голос
/ 28 июня 2011

Как я выполняю этот кусок кода:

Calendar c = Calendar.getInstance();
int day = c.get(Calendar.DAY_OF_MONTH);
int month = c.get(Calendar.MONTH);
int year = c.get(Calendar.YEAR);
int hour = c.get(Calendar.HOUR_OF_DAY);
int minute = c.get(Calendar.MINUTE);

результат это:

day = 28
month = 5
year = 2011
hour = 15
minute = 24

Так что, возможно, вы проходите тестирование 06-28-2011 и никогда не сравнивались правильно, поэтому, если в конце я выведу сообщение об ошибке "07-11-2011" и "18:00", то будет напечатано -1

Когда я использую его с «05-11-2011», он печатает 3

я предлагаю изменить

int month = c.get(Calendar.MONTH);

до

int month = c.get(Calendar.MONTH)+1;
1 голос
/ 28 июня 2011

Я бы вместо этого использовал конструкцию switch case.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...