如何使用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;
}
}
提前致谢。如果我需要提供任何其他信息,请告诉我。
答案 0 :(得分:0)
您必须知道何时设置
字段month = input.nextInt();
您实际上修改了“this”对象,但未修改以下对象“new”
SimpleDate myDate1 = new SimpleDate();
因此,当您使用静态main方法时,您必须能够访问SimpleDate的文件。
很简单,您可以将这些字段设为公开,因此您可以像这样修改它:
myDate1.month = input.nextInt();
或者您可以添加一个方法来设置字段,就像您一样!所以你可以称之为
myDate1.setMonth(input.nextInt());