2016-11-13 126 views
-1

我需要編寫一個閏年的方法。所以該方法必須被稱爲printleap並檢查該數字是否是閏年。所以Java程序將通過讀取年份號碼列表來測試該方法,並僅顯示閏年。 這裏是我所做的:閏年Java Q

import java.util.Scanner; 公共類Ex1PartAassig3 {

public static int printleap(String string) { 
    Scanner sc1=new Scanner(System.in); 
    { 
     System.out.println("This programe calculates leap year."); 
     int year= printleap ("Enter the year:"); 
     if ((year%4==0)&& year % 100 !=0) 
    } 
    System.out.println(year + "is a leap year."); 
    { 
    else if ((year % 4==0) && (year % 100==0)&&(year % 400==0)) 
    { 
     System.out.println(year +"is a leap year."); 
    } 
    else { 
    } 
     System.out.println(year + " is not a leap year."); 

    } 

} 

} 

正在顯示一個錯誤的領域是強調第一個 '其他' 否則,如果((年%4 == 0)& &(每年100%== 0)& & (年%400 == 0)

和兩個大括號,第一隻在第二個的System.out 並且在非常bottom.There所述第一支架的上方位於底部3個括號,但其第一1.

有人可以幫助我運行這個程序,或者我忘記了什麼,謝謝你?

+1

您的第一個'if'語句後,您立即有一個錯誤的右括號。花一些時間看看你的括號是在哪裏打開和關閉。 – LiXie

+1

這不看起來可疑嗎? 'if((year%4 == 0)&& year%100!= 0)}' – Marvin

+0

您的printleap()方法調用您的printleap()方法。這是不必要的。不要打擾要求用戶輸入一年。首先編寫你被要求編寫的方法:一個printleap()方法,它需要一年的時間作爲參數(所以,一個int,而不是一個String),如果那年是一個閏年,它會打印出來。處理用戶輸入,如果你必須這樣做,應該用單獨的方法來完成。您可以先用硬編碼的年份調用printleap()方法來測試它。 –

回答

3

你的大括號都在這個地方,不排隊。這將是一個固定的版本正確匹配括號:

public static void printleap() 
{ 
    try (Scanner sc1=new Scanner(System.in)) 
    { 
     System.out.println("This programe calculates leap year."); 
     System.out.print("Enter the year:"); 
     int year= sc1.nextInt(); 
     if((year % 400 == 0) || ((year % 4 == 0) && (year % 100 != 0))) 
     { 
      System.out.println(year +"is a leap year."); 
     } 
     else 
     { 
      System.out.println(year + " is not a leap year."); 
     } 
    } 
} 

編輯:還更新了if語句使用下面的答案的情況下,因爲一個在最初的代碼確實是有缺陷的。閏年必須是能被4整除,但一年也就是100整除僅僅是一個閏年,如果它也是400

+0

這究竟是「固定的」?它甚至沒有編譯。 –

+0

你說得對,我只是修正了那個錯位的大括號。爲了編譯它,他還必須修復方法簽名。更新了答案,以照顧到這一點。 –

+0

好的,我已經退出了我的downvote。這編譯和正確運行。 –

1

你的條件是錯誤的整除...

它必須是

if((year % 400 == 0) || ((year % 4 == 0) && (year % 100 != 0))) 
+0

不,這是關於原始程序沒有錯誤的事情之一。 OP只是簡單地將這種情況分解爲三種情況。但是他們確定哪些年份是閏年的邏輯其實是正確的。 –

+0

感謝您的意見: – Ciaran

+0

public static int printleap(String string){ \t \t Scanner sc1 = new Scanner(System.in); \t \t { \t \t \t System.out.println(「這個程序計算閏年。「); \t \t \t年整型= printleap(」 輸入年份:「); \t \t \t如果((年%400 == 0)&&((年%4 == 0)&&(年%100! = 0))) \t \t \t { \t \t的System.out.println(年+ 「爲閏年。」); \t \t \t} \t \t否則如果((年%4 == 0)&& (年%100 == 0)&&(年%400 == 0)) \t \t { \t \t \t的System.out.println(年+ 「是一個閏年。」); \t \t} \t \t其他{ \t \t} \t \t \t的System.out.println(年+ 「是不是閏年。」); \t \t \t } \t \t 返回\t 0; \t}} 對不起 – Ciaran

1

你的邏輯(使用ifelse if)應該如下:

if (year%400 == 0) 
    System.out.println(year+ " is leap year"); 
    else if (year%100 == 0) 
    System.out.println(year+ " is NOT leap year"); 
    else if (year%4 == 0) 
    System.out.println(year+ " is leap year"); 
    else 
    System.out.println(year+ " is NOT leap year"); 
0

使用java.time

有一個class for that

Year.now() 
    .isLeap() 

更好始終指定所需/預期的時區,而不是在JVM的當前默認區域毫無保留地依賴。

Year.now(ZoneId.of("Europe/Paris")) 
    .isLeap() 

或指定一年。

Year.of(2017) 
    .isLeap() 

關於java.time

java.time框架是建立在Java 8和更高版本。這些類取代了日期時間類legacy,如java.util.Date,Calendar,& SimpleDateFormat

Joda-Time項目現在位於maintenance mode,建議遷移到java.time類。請參閱Oracle Tutorial。並搜索堆棧溢出了很多例子和解釋。規格是JSR 310

從何處獲取java.time類?

ThreeTen-Extra項目與其他類擴展java.time。這個項目是未來可能增加java.time的一個試驗場。您可以在這裏找到一些有用的類,如Interval,YearWeek,YearQuartermore