2011-06-28 108 views
1

我有一個if else-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; 

在此先感謝!

+5

你是否已經通過調試器連接代碼來確保值是你認爲應該是的? – ChrisBint

+1

如果最後一個「else if」塊*執行,如果它具有與前一個相同的條件,怎麼能執行? –

+0

需要傾斜的基本根本的,如果其他.... – dhams

回答

7

通常我們忘記了MONTHCalendar是從零開始的,換句話說:一月值0而不是1,因爲我們預計..

您可能需要您的遞減... selected_month


使用這一行代碼:

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

或'int month = c.get(Calendar.MONTH)+1;' – jpm

+0

謝謝這個月是個問題! :) – dragonfly

1

我會用switch case構造來代替。

4

你有一個重複的語句:

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

最後一個永遠不會被評估,因爲前一個就已經把它撿起來。我知道第二個更具體,但這並不重要。例如,如果您的年數與您的月數相匹配,並且您的月數相匹配,那麼您的日子也不會有太大影響,因爲第一條陳述成爲正確的是您的其他if語句。

至於爲什麼底部兩條語句都沒有得到評估,我相信@Andreas_D是在他提到月份是基於零的值的時候加入的。這可能是聲明正在起作用,而不是你所期望的。

+1

沒有重複的表達式,代碼格式不正確。最後一個看起來像重複的實際上在下一行有第三次相等性測試。 – jpm

+1

@jpm - 無關緊要,因爲第二個在到達第三個之前將被評估爲真。正如我所說,我知道兩個陳述中的第二個更具體(它有第三個測試),但這並不重要。如果這兩個陳述互換,那就很重要。 – IAmTimCorey

2

你應該把作爲第一個最具體的條件如果。最後一個if不能執行,因爲它的條件比第三個更具體((selected_year == year)& &(selected_month == month)),但是在檢查最後一個之前,第一個部分返回true,所以如果要執行最後一部分(即selected_day == day),則永遠不會執行最後一個。

把這個條件作爲第一個將確保它會被檢查。

3
在Java中

日曆類返回爲0-11個月,

因此,如果當前的月份是一月則返回0

爲2月1日作爲等,

十二月返回11

所以你如果條件總是不等於任何方式

檢查它

評論或回覆,如果任何問題,關於它

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 

因此,也許你經過的2011年6月28日至測試它,從來沒有得到正確的比較,所以如果我打印出「07-11-2011」和「18:00」結束時的錯誤,它打印-1

當我用它「05-11-2011 「它打印3

我的建議是要改變

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

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

嘗試。

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