如何从静态方法打印非静态方法?

How to print a non-static method from a static method?

我需要从命令行打印给定输入的日历。我遇到的主要问题是尝试打印日历的实际主体。我有一个方法:

printMonth(); 

用于打印日历。该方法是无效的和非静态的。但是,当我从 main(静态)调用该方法时,没有输出。

到目前为止,这是我的代码:

class MyDate {

private int day;
private int month;
private int year;

public MyDate(int theDay, int theMonth, int theYear){

    theDay = day;

    theMonth = month;

    theYear = year;

}

public MyDate(){

}

public int getDay() {

    return day;
}

public int getMonth() {

    return month;
}

public String nameOfMonth() {
    switch (month) {
    case 1:
        return "January";
    case 2:
        return "February";
    case 3:
        return "March";
    case 4:
        return "April";
    case 5:
        return "May";
    case 6:
        return "June";
    case 7:
        return "July";
    case 8:
        return "August";
    case 9:
        return "September";
    case 10:
        return "October";
    case 11:
        return "November";
    case 12:
        return "December";
    // for any number less than 1 and greater than 12 throw an exception
    default:
        throw new RuntimeException("Invalid month number");
    }
}

public int getYear() {

    return year;
}



public String getDate(String[] datePartsObj) {

        day = Integer.parseInt(datePartsObj[0]);
        month = Integer.parseInt(datePartsObj[1]);
        year = Integer.parseInt(datePartsObj[2]);

        return day + "/" + month + "/" + year ;

}


  public int getStartDay(int theYear, int theMonth) {

      year = theYear;
      month = theMonth;

        // Get total number of days since 1/1/1800
        int startDay1800 = 3;

        int totalNumberOfDays = getTotalNumberOfDays(theYear, theMonth);



        // Return the start day
        return (totalNumberOfDays + startDay1800) % 7;

      }


public int getTotalNumberOfDays(int theYear, int theMonth) {

    year = theYear;

    month = theMonth;

    int total = 0;



    // Get the total days from 1800 to year - 1
    for (int i = 1800; i < theYear; i++)

    if (isLeapYear(i))

      total = total + 366;

    else

      total = total + 365;



    // Adding days from January to the month prior to the calendar month
    for (int i = 1; i < theMonth; i++)

      total = total + getNumberOfDaysInMonth(theYear, i);



    return total;

  }


 public int getNumberOfDaysInMonth(int theMonth, int theYear) {

     month = theMonth; 

     year = theYear;

        if (theMonth == 1 || theMonth == 3 || theMonth == 5 || theMonth == 7 ||

                theMonth == 8 || theMonth == 10 || theMonth == 12)

          return 31;



        if (theMonth == 4 || theMonth == 6 || theMonth == 9 || theMonth == 11)

          return 30;



        if (theMonth == 2) return isLeapYear(theYear) ? 29 : 28;



        return 0; // If month is incorrect
      }


 public boolean isLeapYear(int theYear) {

     year = theYear;

        if  ((theYear % 4 == 0) && (theYear % 100 != 0)) return true;
        if  (theYear % 400 == 0) return true;
        return false;
    }

}


public class MyCalendar {

private static MyDate myDateObj;


public enum WeekDay{
    Monday,
    Tuesday,
    Wednesday,
    Thursday,
    Friday,
    Saturday,
    Sunday;
}

public MyCalendar(MyDate newdate){



}

public MyCalendar(){

}

public int weekOfMonth() {

    return;

}

public void printMonth() {

    int theYear = myDateObj.getYear();

    int theMonth = myDateObj.getMonth();

    // Get start day of the week for the first date in the month
    int startDay = myDateObj.getStartDay(theYear, theMonth);

    // Get number of days in the month
    int numberOfDaysInMonth = myDateObj.getNumberOfDaysInMonth(theYear, theMonth);

    // Pad space before the first day of the month
    int i = 0;

    for (i = 0; i < startDay; i++)

      System.out.print("    ");



    for (i = 1; i <= numberOfDaysInMonth; i++) {

      if (i < 10)

        System.out.print("   " + i);

      else

        System.out.print("  " + i);



      if ((i + startDay) % 7 == 0)

        System.out.println();

    }



    System.out.println();


}

public static void main(String [] args) {

    String[] datePartsObj;
    datePartsObj = args[0].split("/");
    int day = Integer.parseInt(datePartsObj[0]);
    int month = Integer.parseInt(datePartsObj[1]);
    int year = Integer.parseInt(datePartsObj[2]);



    myDateObj = new MyDate(day, month, year);
    MyCalendar myCalendar = new MyCalendar();


    System.out.println(myDateObj.getDate(datePartsObj) + " is a " + " and locates in the " + myDateObj.nameOfMonth());

    myDateObj.nameOfMonth();

    System.out.println("The calendar of " + myDateObj.nameOfMonth() + " " + myDateObj.getYear() + " is: ");

    System.out.println();

    System.out.println(" Sun Mon Tue Wed Thu Fri Sat");

    myCalendar.printMonth();


    }


}

我是 java 的新手,因此非常感谢任何对此问题的帮助!

在您的方法 printMonth() 中,您调用了方法 getNumberOfDaysInMonth(theMonth, theYear) 并且您以错误的顺序传递了参数

更改此行:

int numberOfDaysInMonth = myDateObj.getNumberOfDaysInMonth(theYear, theMonth);

给这个:

int numberOfDaysInMonth = myDateObj.getNumberOfDaysInMonth(theMonth, theYear);