2012-11-20 60 views
4

我有一個學校的任務,使一個程序導致真或假。這是關於一年是不是閏年。我現在的問題是我使用公共靜態布爾而不是公共布爾值。 這是我的代碼:更改靜態布爾值

public class Assignment { 

    static boolean isLeapYear; 

    public static void main(String[] args) 
    {   
     int year = 2000; 
     isLeapYear(year); 
    } 
    public static boolean isLeapYear(int year) { 
     if (((year/100)%4 == 0 && year%4 ==0) || (year % 400 == 0)) 
      isLeapYear = true; 

     else 
      isLeapYear = false; 

     System.out.println(isLeapYear); 

     return isLeapYear; 
    } 
} 

年整型是2000的時刻,但規則是這樣的: 閏年是一年至極可以通過4,除非今年是一個新的開始劃分世紀(1700,1800,1900 .....)。所以即使你可以將1900除以4,你也不能將它除以400,所以它是錯誤的。 所以再次提出這個問題:我需要做什麼,我可以使用公共布爾而不是公共靜態布爾?

+0

要使用公共布爾值,您需要創建一個對象。 – gmustudent

回答

2

如果你想讓你的方法是非靜態的,你需要創建一個類的實例來從你的main方法調用該方法。然後你可以讓你的isLeapYear變量非靜態: -

boolean isLeapYear; 
public static void main(String[] args) 
{   
    int year = 2000; 
    new Assigment().isLeapYear(year); 
} 
public boolean isLeapYear(int year) { 
    // access isLeapYear as `this.isLeapYear` or just `isLeapYear` 
} 

但是,準確地說,你不需要你的結果存儲在一個布爾變量。如果你想返回一個表達式的布爾值,那麼你可以返回該表達式。

所以,只要在你的方法,該代碼也將正常工作,這是更具可讀性,並讓該方法是靜態的: -

return (((year/100)%4 == 0 && year%4 ==0) || (year % 400 == 0)) 

而且從你的主電話: -

System.out.println("Year : " + year + ", is leap year: " + isLeapYear(year)); 
+0

@Downvoter ..請發表評論。我回答了OP詢問的問題:''我需要做什麼以便我能夠使用公共布爾值而不是公共靜態布爾值?'。請在downvoting之前閱讀該問題?我不認爲這個答案真的需要一個downvote。 –

+0

我認爲這是一個很好的答案,所以我投了票。 –

+0

謝謝@BaileyS。 :) –

0

你的任務是否說它必須存儲在類或實例變量中?如果沒有,就沒有必要對public boolean isLeapYearpublic static boolean isLeapYear,只返回計算的結果並將其存儲在一個局部變量是這樣的:

main方法
public static boolean isLeapYear(int year) { 
    return ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0); 
} 

int year = 2000; 
boolean isLeap = isLeapYear(year); 
System.out.println(isLeap); 
2

你不需要在任何地方存儲這個結果。

用途:

public static boolean isLeapYear(int year) 
{ 
    return (((year/100)%4 == 0 && year%4 ==0) || (year % 400 == 0)); 
} 
+0

肯定這是一個很好的建議,但它並沒有真正回答OP的要求。他問的是如何使用「非靜態」方法而不是「靜態方法」。 –

1

靜態方法只能訪問靜態變量,唯一的實例方法可以訪問實例的方法,其中,如果你認爲面向對象的,你可以推斷出。

以防萬一你應該存儲布爾isLeapYear

public class Testing { 
boolean isLeapYear; 

public static void main(String[] args) 
{   
    int year = 2000; 
    new Testing().isLeapYear(year); 
} 
public boolean isLeapYear(int year) { 
    if (((year/100)%4 == 0 && year%4 ==0) || (year % 400 == 0)) 
     isLeapYear = true; 

    else 
     isLeapYear = false; 

    System.out.println(isLeapYear); 

    return isLeapYear; 
} 
} 
0

方法是static由從類這樣的對罵他們訪問:

Assignment.isLeapYear(1990) 

中的方法不static從類的實例訪問,如下所示:

Assignment a = new Assignement(); 
a.isLeapYear(1990); 

靜態方法只能訪問靜態實例變量。要使用非靜態實例變量,您需要將您的函數轉換爲常規實例並實例化該類。