如何更改myDate1的值并在main方法中打印出新值?

时间:2015-03-21 00:16:40

标签: java

如何使用3个单独的set方法将myDate1更改为我输入的新日期?

继承3套方法

   public void setMonth( int mm )
  {
    month = ( mm >= 1 && mm <= 12 ? mm : 1 );
  }

  /** setDay
  *  @param dd new value for day
  *  if dd is legal day for current month, sets day to dd
  *  otherwise, sets day to 1
  */
  public void setDay( int dd )
  {
    day = ( dd >= 1 && isValidDay( dd ) ? dd : 1 );
  }

  /** setYear
  *  @param yyyy new value for year
  *  sets year to yyyy
  */
  public void setYear( int yyyy )
  {
    year = yyyy;
  }

我想将我写的代码保留在主方法中。

这是代码的其余部分。

 import java.io.Serializable;       // for object I/O to file
import java.util.Scanner;
//public class SimpleDate
public class SimpleDateClientFL implements Serializable

{

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

  public static void main(String[] args) {
  Scanner input = new Scanner(System.in);
    int month;
    int day;
    int year;
    SimpleDate myDate1 = new SimpleDate();

    SimpleDate myDate2 = new SimpleDate();

    System.out.println(myDate1.toString());

    System.out.println(myDate1);

    myDate1.nextDay();
    myDate1.nextDay();
    myDate1.nextDay();

    System.out.println(myDate1);

    System.out.print("enter day: ");
    day = input.nextInt(); 


    System.out.print("enter month: ");
    month = input.nextInt(); 


    System.out.print("enter year: ");
    year = input.nextInt();



    System.out.println("my birthday: " + myDate1);
  }

  /** default constructor
  *  sets month to 1, day to 1 and year to 2000
  */
  public void SimpleDate( )
  { 
    setDate( 1, 1, 2000 );
  }

  /** overloaded constructor
  *  @param mm    initial value for month
  *  @param dd    initial value for day
  *  @param yyyy  initial value for year
  *
  *  passes parameters to set methods
  */
  public void SimpleDate( int mm, int dd, int yyyy )
  {
    setMonth( mm );
    setYear( yyyy );
    setDay( dd );
  }

  /* accessor methods */
  int getMonth( ) { return month; }
  int getDay( )   { return day; }
  int getYear( )  { return year; }

  /** mutator method */
  /** setMonth
  *  @param mm new value for month
  *  if mm is between 1 and 12, sets month to mm
  *  otherwise, sets month to 1
  */
  public void setMonth( int mm )
  {
    month = ( mm >= 1 && mm <= 12 ? mm : 1 );
  }

  /** setDay
  *  @param dd new value for day
  *  if dd is legal day for current month, sets day to dd
  *  otherwise, sets day to 1
  */
  public void setDay( int dd )
  {
    day = ( dd >= 1 && isValidDay( dd ) ? dd : 1 );
  }

  /** setYear
  *  @param yyyy new value for year
  *  sets year to yyyy
  */
  public void setYear( int yyyy )
  {
    year = yyyy;
  }

  /** sets date to the next day
  */
  public void nextDay( )
  {
     if ( ! isValidDay( ++day ) )
     {
         day = 1;
         if ( ++month > 12 )
         {
             month = 1;
             year++;
         }
     }

  }

  private boolean isValidDay( int newDay )
  {
     int [] daysInMonth = { 0, 31, 28, 31,
                                30, 31, 30,
                                31, 31, 30,
                               31, 30, 31 };

    if ( newDay > daysInMonth[month] )
    {
       if ( month == 2 && isLeapYear( ) && newDay == 29 )
          return true;
       else
          return false;
    }
    else
       return true;

  }

  private boolean isLeapYear( )
  {
     return !( year % 4 != 0
               ||( year % 100 == 0 && year % 400 != 0 ) );
  }


  /** setDate
  *  @param mm    new value for month
  *  @param dd    new value for day
  *  @param yyyy  new value for year
  *  passes parameters to setMonth, setDay, and setYear
  */
  public void setDate( int mm, int dd, int yyyy )
  {
    setYear( yyyy );  // set year first (could be leap year)
    setMonth( mm );   // set month next
    setDay( dd );     // set day
  }

  /** toString
  *  @return String
  *  returns date in mm/dd/yyyy format
  */
  public String toString( )
  {
    return month + "/" + day + "/" + year;
  }

  /** equals
  *  @param   d  Object to compare to this object
  *  @return  true if d is equal to this object
  *           false, otherwise
  */
  public boolean equals( Object d )
  {
    if ( !( d instanceof SimpleDate ) )
       return false;
    SimpleDateClientFL d1 = (SimpleDateClientFL)d;
    if ( month == d1.month
         && day == d1.day
         && year == d1.year )
      return true;
    else
      return false;
  }
}

提前致谢。如果我需要提供任何其他信息,请告诉我。

1 个答案:

答案 0 :(得分:0)

您必须知道何时设置

字段
month = input.nextInt(); 

您实际上修改了“this”对象,但未修改以下对象“new”

SimpleDate myDate1 = new SimpleDate();

因此,当您使用静态main方法时,您必须能够访问SimpleDate的文件。

很简单,您可以将这些字段设为公开,因此您可以像这样修改它:

myDate1.month = input.nextInt(); 

或者您可以添加一个方法来设置字段,就像您一样!所以你可以称之为

myDate1.setMonth(input.nextInt());