有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

下面是三种集合方法

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

我想把我写的代码保留在main方法中

下面是代码的其余部分

 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) 个答案

  1. # 1 楼答案

    你必须知道你什么时候设置了这样的字段

    month = input.nextInt(); 
    

    您实际上修改了“this”对象,但没有修改“new”下面的对象

    SimpleDate myDate1 = new SimpleDate();
    

    因此,当您使用静态main方法时,必须具有对SimpleDate文件的访问权限

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

    myDate1.month = input.nextInt(); 
    

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

    myDate1.setMonth(input.nextInt());