2016-02-26 85 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));  
    } 
} 
相关问题