从另一个方法调用方法(java)

时间:2016-02-26 21:07:33

标签: java boolean

几个星期前我开始自己学习java,并且我一直在运行同样的基本问题,在那里我无法从同一个类中的另一个方法调用一个方法。我要么得到一个未找到的"符号"错误(我认为因为该方法超出范围或方法不再适用。以下代码是java exercise的一部分,用于创建日历类型的程序。我将使用//在代码注释中指出问题到底在哪里。

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
   }
}

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

从代码中删除public static boolean isLeapYear;,每次需要调用函数时,在这种情况下public static boolean isLeapYear(int year) { ..}必须使用括号让编译器知道你实际上是在调用函数。< / p>

在这种情况下,您应该使用isLeapYear(year)

然后if (isLeapYear(year)) { .. } else {..}

答案 1 :(得分:0)

鉴于MyApplication的包名称(在每个地方替换您的包裹名称,这个名称出现在下方)import isLeapYear,如下所示。

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));     
  }
}