2011-10-28 111 views
0

我在調用方法時遇到問題。例如,我想下面的程序有兩種方法:主調用方法

  • 第一個是檢查年是飛躍與否,
  • 第二個是在一個月
  • 顯示的天數

我不能調用main中的方法。

import java.util.Scanner; 

public class LeapYearCheck { 

    public static void main(String[] args) { 
     LeapYearCheck ob = new LeapYearCheck(); 
     ob.isLeapYear(); 
     ob.daysInMonth(); 
    } 

    static void isLeapYear() { 
     Scanner input = new Scanner(System.in); 
     int month = input.nextInt(); 
     System.out.println("Enter a year: "); 
     int year = input.nextInt(); 
     if (year % 4 == 0 || year % 400 == 0) { 
      System.out.println(year + " is leap year:"); 
     } else { 
      System.out.println(year + " is not leap year:"); 
     } 
    } 

    static void daysInMonth() { 
     Scanner input = new Scanner(System.in); 
     System.out.println("Enter a month :"); 
     int month = input.nextInt(); 
     int year = 0; 
     if (month == 2) { 
      System.out.println("There are 29 days in February: " + year + " year"); 
     } else if (month == 1) { 
      System.out.println("The are 31 days in January " + year + " year"); 
     } else if (month == 2) { 
      System.out.println("The are 28 days in February " + year + " year"); 
     } else if (month == 3) { 
      System.out.println("The are 31 days in March " + year + " year"); 
     } else if (month == 4) { 
      System.out.println("The are 30 days in April " + year + " year"); 
     } else if (month == 5) { 
      System.out.println("The are 31 days in May " + year + " year"); 
     } else if (month == 6) { 
      System.out.println("The are 30 days in June " + year + " year"); 
     } else if (month == 7) { 
      System.out.println("The are 31 days in July " + year + " year"); 
     } else if (month == 8) { 
      System.out.println("The are 31 days in August " + year + " year"); 
     } else if (month == 9) { 
      System.out.println("The are 30 days in September " + year + " year"); 
     } else if (month == 10) { 
      System.out.println("The are 31 days in October " + year + " year"); 
     } else if (month == 11) { 
      System.out.println("The are 30 days in November " + year + " year"); 
     } else if (month == 12) { 
      System.out.println("The are 31 days in December " + year + " year"); 
     } else { 
      System.out.println("Invalid Month, Please enter a number between 1 & 12 Merci: "); 
     } 
    } 
} 
+0

對不起,歡呼的隊友;/ – Kiril

+0

歡呼菲利普我欣賞它 – Kiril

+2

究竟是什麼問題?該程序對我來說運行得非常好(雖然有一些邏輯錯誤) –

回答

5

該方法被聲明爲「靜態」。在Java中,這意味着該方法可用於,而不適用於該類的對象。

要清楚:我明白你的問題是,當調用第二種方法時,第一種方法的年份不再可用,對吧?

這是因爲您沒有將它存儲在實例變量中,而是存儲在方法的局部變量中。一旦方法完成,局部變量就消失了。相反,爲你的類創建一個實例變量,例如「私人詮釋年」;在第一種方法中,然後使用「this.year = ...」爲變量賦值。在第二種方法中,使用「this.year」來訪問它。

+0

謝謝伊辛格! – Kiril

0

這應該運行。也許不正確,但它會運行。也許你指的是你在main方法中調用兩個方法的警告。你看,你的兩個方法是靜態的。靜態方法不需要調用對象實例。但是你在LeapYearCheck實例上調用它們。這是允許的(它將委託給適當的類),只是沒有必要。

4

您的代碼將編譯並運行(我剛試了一下),但你應通過表情不調用靜態方法是這樣的:

LeapYearCheck ob = new LeapYearCheck(); 
ob.isLeapYear(); 
ob.daysInMonth(); 

你應該要麼使這些實例的方法稱他們爲靜態方法,任選類型名進行限定:

LeapYearCheck.isLeapYear(); // Explicit 
daysInMonth(); // Implicit 

調用靜態方法,就好像它們實例方法導致混淆 - 它看起來像它取決於實例,但它不。

下一個怪胎是在這裏:

static void isLeapYear() { 
    Scanner input = new Scanner(System.in); 
    int month = input.nextInt(); 
    System.out.println("Enter a year: "); 

你等待用戶輸入,但沒有告訴用戶爲什麼 - 和你再忽略月無論如何(這是有道理的,因爲它是不相關的工作看看一年是不是閏年)。剛剛擺脫這一行:

int month = input.nextInt(); 

此外,這種邏輯被打破:

if (month == 2) { 
    System.out.println("There are 29 days in February: " + year + " year"); 
} else if (month == 1) { 
    System.out.println("The are 31 days in January " + year + " year"); 
} else if (month == 2) { 
    System.out.println("The are 28 days in February " + year + " year"); 

那麼對於daysInMonth方法:

  • 你不是問對今年
  • 在您報告2月有29天之前,您並未嘗試檢測閏年

基本上代碼有點此刻的一塌糊塗,但你不能夠從main調用方法應該是一個問題的問題...

編輯:如前所述,你的飛躍一年的計算都是錯誤的 - 我假設事物的日曆一側是練習目標的一部分,但通常最好使用Calendar(及其子類)或Joda Time開始。

+1

這是一個很好的答案,我只想補充說,在測試日期這樣的事情時,他應該考慮使用日曆(很可能是GregorianCalendar),而不是他目前正在做的(不正確的)手動測試。 GregorianCalendar爲您提供isLeapYear方法。 – Thor84no

+0

那麼,我當然認爲,當一個主要的方法是靜態的,它只能通過其他靜態方法訪問它是不是正確的? – Kiril

+0

@Kiril:那是在說*調用一個主要方法,但無論如何它是錯誤的。真正理解「靜態」的含義非常重要 - 我建議您非常仔細地閱讀一本書或教程*。 –