2012-01-24 32 views
5

我已經嘗試了幾種不同的方法,如print(boolean isLeapYear)和其他一些方法,但我無法弄清楚如何讓它工作。它總是說我有一個缺少的類(布爾是原始的,它是否需要一個?)反正,如果isLeapYear if-else語句是錯誤的,我不擔心這些..我只需要弄清楚如何打印取出布爾值的值;在正確的方向上的任何幫助/點是極大的讚賞=]如何打印出此布爾值的值? (Java)

import java.util.Scanner; 

public class booleanfun { 
    boolean isLeapYear; 

    public static void main(String[] args) 
    { 
     System.out.println("Enter a year to determine if it is a leap year or not: "); 
     Scanner kboard = new Scanner(System.in); 
     int year = kboard.nextInt(); 
    } 
public boolean isLeapYear(int year) 
    { 
    if (year % 4 != 0) 
     isLeapYear = false; 

    else if ((year % 4 == 0) && (year % 100 == 0)) 
     isLeapYear = false; 

    else if ((year % 4 == 0) && (year % 100 == 0) && (year % 400 == 0)) 
     isLeapYear = true; 

    else 
     isLeapYear = false; 

System.out.println(isLeapYear); 

    return isLeapYear; 
    } 
} 
+1

remove「System.out.println(boolean isLeapYear);」上面這行工作。 –

+0

那不是「布爾isLeapYear」? – cutrightjm

+0

@OliCharlesworth他作爲一個班級領域。他可能會感到困惑,因爲靜態main方法不能調用非靜態isLeapYear()方法。 – bdares

回答

6
System.out.println(isLeapYear); 

應該工作得很好。

順便說一句,在

else if ((year % 4 == 0) && (year % 100 == 0)) 
    isLeapYear = false; 

else if ((year % 4 == 0) && (year % 100 == 0) && (year % 400 == 0)) 
    isLeapYear = true; 

year % 400部分永遠不會達到的,因爲如果(year % 4 == 0) && (year % 100 == 0) && (year % 400 == 0)是真的,那麼(year % 4 == 0) && (year % 100 == 0)必須成功。

也許交換這兩個條件或重構的時候:

else if ((year % 4 == 0) && (year % 100 == 0)) 
    isLeapYear = (year % 400 == 0); 
1

首先,你的變量「isLeapYear」是同名的方法。這只是不好的做法。

其次,你沒有聲明「isLeapYear」作爲變量。 Java是強類型的,因此您需要在方法開始時使用 boolean isLeapYear;

此致電: System.out.println(boolean isLeapYear); 是錯的。方法調用中沒有聲明。

一旦聲明isLeapYear是一個布爾變量,你可以叫 System.out.println(isLeapYear);

更新: 我剛看到它的聲明爲一個字段。因此,只需刪除行System.out.println(boolean isLeapYear); 您應該明白,您不能從main()方法調用isLeapYear。您無法使用實例從靜態方法調用非靜態方法。 如果你要稱呼它,你需要添加

booleanfun myBoolFun = new booleanfun(); 
System.out.println(myBoolFun.isLeapYear); 

我真的建議你使用Eclipse,它會讓你知道在飛行和更容易學習這種方式這樣的編譯錯誤。

0
public boolean isLeapYear(int year) 
{ 
    if (year % 4 != 0){ 
     isLeapYear = false; 
     System.out.println("false"); 
    } 
    else if ((year % 4 == 0) && (year % 100 == 0)){ 
     isLeapYear = false; 
     System.out.println("false"); 
    } 
    else if ((year % 4 == 0) && (year % 100 == 0) && (year % 400 == 0)){ 
     isLeapYear = true; 
     System.out.println("true"); 
    } 
    else{ 
     isLeapYear = false; 
     System.out.println("false"); 
    } 
    return isLeapYear; 
} 
+0

對於下來的選民,你能告訴我爲什麼這是無用的嗎? –

+0

@ekaj你看到最後一行花花公子了嗎?它說'return isLeapYear' –

+0

它甚至在第三個if中打印一個不同的值(來自'isLeapYear')。爲什麼不只是'System.out.println(isLeapYear);'在返回之前? –

10

有幾個問題。

一個風格;總是大寫類名。這是一個普遍遵守的Java約定。如果不這樣做會讓其他程序員感到困惑。

其次,線

System.out.println(boolean isLeapYear); 

是語法錯誤。刪除它。

第三。

你永遠不會從你的主程序調用函數。這就是爲什麼你從來沒有看到任何迴應 輸入。

+0

還有其他問題。 – ncmathsadist

+2

@ekaj他告訴你如何使它工作。他還向你提供了一些能夠長期幫助你的提示。要添加他說的話,你應該改變布爾的名字或方法,因爲他們有相同的名字。這些是有用的批評,不打算讓你失望。 – StartingGroovy

+0

謝謝@StartingGroovy – ncmathsadist

4

你應該刪除布爾變量前的'boolean'。

做這樣的:

boolean isLeapYear = true; 
System.out.println(isLeapYear); 

boolean isLeapYear = true; 
System.out.println(isLeapYear?"yes":"no"); 

的另一件事北京時間帽子你似乎並沒有在所有調用的方法! 該方法和變量都不是靜態的,因此,您必須先創建一個類的實例。或者你只需​​要使用靜態方法,而不是直接從你的方法調用你的方法。

因此,代碼中有幾處錯誤。也許你應該從一個更簡單的例子開始,然後重做它,直到它做到你想要的。

例子:

import java.util.Scanner; 

public class booleanfun { 
    static boolean isLeapYear; 

    public static void main(String[] args) 
    { 
     System.out.println("Enter a year to determine if it is a leap year or not: "); 
     Scanner kboard = new Scanner(System.in); 
     int year = kboard.nextInt(); 
     isLeapYear(year); 
    } 
    public static boolean isLeapYear(int year) { 
     if (year % 4 != 0) 
     isLeapYear = false; 

     else if ((year % 4 == 0) && (year % 100 == 0)) 

     isLeapYear = false; 

     else if ((year % 4 == 0) && (year % 100 == 0) && (year % 400 == 0)) 
      isLeapYear = true; 

     else 
      isLeapYear = false; 

     System.out.println(isLeapYear); 

     return isLeapYear; 
    } 
} 
2

有一對夫婦的方式來解決你的問題,但是這可能是最簡單的:

main方法是靜態的,所以它並沒有獲得實例成員(isLeapYear字段和isLeapYear方法)。一種解決此問題的方法是使字段和方法都是靜態的:

static boolean isLeapYear; 
/* (snip) */ 
public static boolean isLeapYear(int year) 
{ 
    /* (snip) */ 
} 

最後,你實際上並沒有打電話給isLeapYear方法(這就是爲什麼你沒有看到任何結果)。添加此行int year = kboard.nextInt();後:

isLeapYear(year);

這應該是一個開始。還有一些其他的最佳實踐可以遵循,但現在只需着重讓您的代碼運行起來;你可以稍後重構。