2016-02-26 6 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

, пожалуйста, покажите код, который действительно генерирует ошибку. то, что у вас сейчас есть, фактически не показывает вызов isLeapYear, кроме основного (что не является проблемой). также, оставьте точку с запятой от конца вашего определения метода. –

ответ

0

Удалить public static boolean isLeapYear; из вашего кода и каждый раз, когда вам нужно вызвать функцию, в этом случае public static boolean isLeapYear(int year) { ..} вы должны использовать скобку, чтобы компилятор знал, что вы на самом деле вызываете там функцию.

В этом случае вы должны пойти с isLeapYear(year)

, а затем if (isLeapYear(year)) { .. } else {..}

0

Учитывая название пакета MyApplication (заменить ваше имя пакета в каждом месте, это один происходит ниже) importisLeapYear, как показано ниже.

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));  
    } 
} 
Смежные вопросы