2014-03-28 83 views
0

我無法將這些if語句從Python嵌套到Java。如果使用Java語句嵌套

def leapyear(yearr): 
    if (year % 4 == 0): 
     if (year % 100 == 0): 
      if (year % 400 == 0): 
       return True 
      else: 
       return False 
     else: 
      return True 
    else: 
     return False 

我目前的工作上面轉換成Java:

boolean leapyear(int year) { 
    if (year % 4==0) { 
     if (yearr%100==0) { 
      if (year%400==0) { 
    else 
     return false; 
    } 
    else 
     return true; 
    } 
    else 
     return false; 
    } 
} 

然而,我的Java轉換是給我的錯誤,主要是因爲我不認爲我的嵌套條件有正確的關閉括號。你能給我任何提示或資源,可以幫助我解決這個問題嗎?

+0

單行:'return year%4 == 0 &&(year%400 == 0 | |年%100!= 0)' – Eric

回答

4

else語句需要大括號太多,你忘了return語句最裏面if,和你在一個位置拼錯yearr

boolean leapyear(int year) { 
    if (year % 4==0) { 
     if (year % 100 == 0) { 
      if (year % 400 == 0) { 
       return true; 

    } else { 
     return false; 
    } 
    } else { 
     return true; 
    } 
    } else { 
     return false; 
    } 

} 

Java並不需要縮進像Python做,但它ð讓您的分支結構更具可讀性,如果你沒有無論如何使用它:

boolean leapyear(int year) { 
    if (year % 4 == 0) { 
     if (year % 100 == 0) { 
      if (year % 400 == 0) { 
       return true; 
      } else { 
       return false; 
      } 
     } else { 
      return true; 
     } 
    } else { 
     return false; 
    } 
} 

你不需要在這裏儘可能多的return報表時,year % 400 == 0已經計算結果爲布爾:

boolean leapyear(int year) { 
    if (year % 4 == 0) { 
     if (year % 100 == 0) { 
      return year % 400 == 0; 
     } else { 
      return true; 
     } 
    } else { 
     return false; 
    } 
} 

或作爲一個班輪:

boolean leapyear(int year) { 
    return year % 4 == 0 && (year % 100 != 0 || year % 400 == 0); 
} 

爲了完整起見,這裏是Python版本的方式會寫:

def leapyear(year): 
    return year % 4 == 0 and (year % 100 != 0 or year % 400 == 0) 

或更好,用calendar.isleap()代替。

+0

,如果它正確縮進(這是Python中的),它將更具可讀性:-) –

+2

你忘記了ifs – thumbmunkeys

+0

@thumbmunkeys的右花括號:它告訴你多少我是一位Python開發人員;我的括號foo是生鏽的。 –

-2
boolean leapyear(int year) 
{ 
    if (year % 4==0) 
    { 
     if (year%100==0) 
     { 
      if (year%400==0) 
      { 
      return true; 
      } 
      else 
      { 
       return true; 
      } 
     } 
     else`` 
     { 
     return false; 
     } 
    } 
} 
+1

你在某處遺失了'else'和'return'。 –

+0

條件年%400返回始終爲真 – thumbmunkeys

1

繼承人我嘗試:

boolean leapyear(int year) 
{ 
    if (year % 4 == 0) 
    { 
     if (year % 100 == 0) 
     { 
     return (year % 400 == 0); 
     } 
     else 
     { 
      return true 
     } 
    } 

    return false; 
} 

或使用本:

return Java.util.GregorianCalendar.getInstance().isLeapYear(year) 
+0

Java是否有DateTime.IsLeapYear()方法?我的Google-fu只爲dotNet提供了這種方法。 – Duncan

+0

哦對了java,對不起,認爲這是c# – thumbmunkeys

+0

如果你想把它放回去,似乎你的意思是說if語句可以被'return Java.util.GregorianCalendar.getInstance()。isLeapYear (year)' – Duncan

1

關於完全移除IFS是什麼?

public boolean leapyear(int year) { 
    return (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0)); 
} 
4

有這麼多可能的退出點是不好的做法。另外,如果您不想重新發明輪子,則可以使用Java庫代碼,例如:

boolean isLeapYear(int year){ 
    GregorianCalendar cal = new GregorianCalendar(); 
    return cal.isLeapYear(year); 
} 
+0

請參閱[只有一個回報的概念來自哪裏?](http://programmers.stackexchange.com/q/118703);在Java和其他語言中使用自動資源管理的多個退出點是很好的。當然,使用標準庫還是更好,而不是重新發明輪子。 –