2016-02-26 90 views
-2

我幾個星期前開始自己學習java,並且一直運行相同的基本問題,我無法從同一個類中的另一個方法調用方法。我得到了一個「找不到符號」的錯誤(我認爲是因爲該方法超出了範圍,或者該方法不起作用了,下面的代碼是用於創建日曆類程序的java exercise的一部分。在代碼評註//指示,其中,問題究竟出在從另一種方法調用方法(java)

public class MyDate { 
private int year; 
private int month; 
private int day; 
private static String[] strMonths = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", 
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec"}; 

private static String[] strDays = {"Sunday", "Monday", "Tuesday", 
"Wednesday", "Thursday", "Friday", "Saturday"}; 

private static int[] daysInMonths = {31, 28, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; 

public static boolean isLeapYear(int year) { // This is the first method, which works fine 
// when being called from the main method. 
    if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) { 
     return true; 
    } else { 
     return false; 
    } 
    }; 

public static boolean isLeapYear; // I put this declaration in, because I got 
// "symbol not found" errors, when referencing the method from the second method. 
// I'm guessing it partially invalidates the first declaration. 
public static boolean isValidDate(int year, int month, int day) { // The second method 
    if ((year >= 1) && (year <= 9999)){ 
     if ((month >= 0) && (month <= 11)) { 
      if ((day >= 1) && ((month == 0) || (month == 2) || (month == 4) || (month == 6) 
|| (month == 7) || (month == 9) || (month == 11)) && (day <= 31)) { 
       return true; 
      } 
      else if ((day >= 1) && ((month == 3) || (month == 5) || (month == 8) 
|| (month == 10) && (day <= 30))) { 
       return true; 
      } 
      else if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)){ 
// Code from the first method (above), which I would like to replace with just a reference 
// to the first method (for instance (isLeapYear = true)), 
// but it doesn't work the same as the code above (or at all). 
       if ((month == 1) && (day == 29)) { 
        return true; 
       } 
       else 
        if ((day >= 1) && ((month == 1) && (day <= 28))) { 
        return true; 
        } 
        else { 
         return false; 
         } 



      }   
     } 
    } 
    return isValidDate; } 

作爲參考,它應該isLeapYear工作的方法,這種方法主要測試時:

public static void main(String[] args) { 
    System.out.println(isLeapYear(1900)); // false 
    System.out.println(isLeapYear(2000)); // true 
    System.out.println(isLeapYear(2011)); // false 
    System.out.println(isLeapYear(2012)); // true 
    } 
} 

謝謝尋求幫助!

+1

'isLeapYear(年)'是你怎麼稱呼它。 – resueman

+1

請顯示實際產生錯誤的代碼。你現在所擁有的除了main之外實際上並沒有顯示對isLeapYear的調用(這不是問題)。另外,將分號留在方法定義的末尾。 –

回答

0

刪除public static boolean isLeapYear;從您的代碼和每次您需要調用一個函數,在這種情況下public static boolean isLeapYear(int year) { ..}您必須使用括號讓編譯器知道您實際上在那裏調用一個函數。

在這種情況下,你應該用isLeapYear(year)

去,如下圖所示importisLeapYear然後if (isLeapYear(year)) { .. } else {..}鑑於包名MyApplication

0

(在下面這一個每次出現代替您的包名)。

package MyApplication; 

public class MyDate { 

public static boolean isLeapYear(int year) { // This is the first method, which works fine 
// when being called from the main method. 
    if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) { 
     return true; 
    } else { 
     return false; 
    } 
    }; 

} 

主要類:

package MyApplication; 

import static MyApplication.MyDate.isLeapYear; 

public class NewClass{ 

    public static void main(String[] args) throws Exception 
    { 
    System.out.println(isLeapYear(1900)); // false 
    System.out.println(isLeapYear(2000)); // true 
    System.out.println(isLeapYear(2011)); // false 
    System.out.println(isLeapYear(2012));  
    } 
} 
相關問題