如果否则 - 如果不工作

时间:2011-06-28 13:16:35

标签: java android if-statement

我有一个if else-if块,如下所示,但它只能工作一半。如果部分工作,第一个if-else也是如此。但是,即使在它们应该评估为true的情况下,最后两个if-else语句也永远不会被执行。谁能告诉我我在这里做错了什么?

//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 个答案:

答案 0 :(得分:7)

通常我们会忘记MONTH中的Calendar基于零,换句话说:1月的值是0而不是1,正如我们所期望的那样。< / p>

您可能需要递减selected_month ...


在您的代码中使用此行:

int selected_month = Integer.parseInt(selected_date_string[0]) - 1;

答案 1 :(得分:4)

你有一个重复的陈述:

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

最后一个永远不会被评估,因为前一个已经拿起它。我知道第二个更具体,但这无关紧要。例如,如果您的年份匹配并且您的月份匹配,那么您的日子也无关紧要,因为第一个成立的语句是您的error = 3 else if语句。

至于为什么底部的两个陈述都没有得到评估,我相信@Andreas_D在他提到月份是零基值时就是这样。可能是声明正在发挥作用,而不是您所期望的。

答案 2 :(得分:3)

Java中的日历类返回0-11个月,

所以如果当前月份是1月那么它返回0

对于feb 1,依此类推,

12月它返回11

所以你的if条件永远不会等于任何方式

检查

如有任何问题,请发表评论或回复

答案 3 :(得分:2)

你应该把最具体的条件作为第一个if。最后一个if不能执行,因为它的条件比第三个更具体((selected_year == year)&amp;&amp;&quot;(selected_month == month))但是第一个部分在最后一个获得之前返回第3个为真检查,所以你永远不会得到最后一个如果要执行,即使它是最后一部分(selected_day == day)。

将该条件作为第一个条件将确保它将被检查。

答案 4 :(得分:1)

我会改用switch case构造。

答案 5 :(得分:1)

当我执行这段代码时:

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 < / p>

当我使用“05-11-2011”时,它打印3

我的建议是改变

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

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

答案 6 :(得分:1)

试试这个。

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