1960年6月10日的日期很特别,因为当我们按照以下格式编写日期时,每天的月份时间等于年份。 6/10/60
设计一个名为Magic Date(DONE)的类。类构造函数应该接受一个月,一天,一年的值作为整数。 (完成)。该类还应该有一个名为isMagic的方法,如果传递给构造函数的日期是魔术,则返回true,否则返回false(我有方法Done): 编写一个程序,要求用户输入一个月,一天,两位数年份的整数(完成)程序应创建一个MagicDate类的实例,以确定用户输入的日期是否为魔术日期。如果是,程序应显示一条消息,说明日期是魔术。否则它应显示一条消息,说日期不是魔术。(需要帮助) 需要帮助的是让它返回一个值。凭借我现在拥有的东西,即使每天*月不= =年,它也总是会返回魔法 这是我的代码。
public class MagicDate
{
int month;
int day;
int year;
int value;
public MagicDate(int month, int day, int year)
{
}
public void isMagic()
{
if (month * day == year)
System.out.println("Magic");
else
System.out.println("Not Magic");
}
}
和驱动程序
public void challenge16()
{
int month;
int day;
int year;
System.out.println("Please enter a month");
month = keyboard.nextInt();
System.out.println("Please enter a day");
day = keyboard.nextInt();
System.out.println("Please enter a year");
year = keyboard.nextInt();
MagicDate magicdate1 = new MagicDate(month, day, year);
magicdate1.isMagic();
}
}
我是新手,这是我的第一个学期所以这可能是一个愚蠢的错误所以我道歉。我也尝试了这样的方法,但没有得到任何返回值。
public boolean isMagic()
if (day * month ==year)
return True;
else
return False
答案 0 :(得分:1)
您的MagicDate
类无法正常工作,因为您从未在实例字段中存储赋予构造函数的参数。因此,实例字段始终具有默认值(0
)。
如果要存储传入的值,则必须在代码中执行此操作:
public MagicDate(int month, int day, int year)
{
this.month = month;
this.day = day;
this.year = year;
// You might consider initializing `value` here as well, but I
// have no idea what it's for, so I can't give an example.
}
完成此操作后,您的isMagic
方法应该开始工作,因为您依赖于隐式this
。也就是说,因为在该方法中你没有在year
范围内有任何其他内容(例如),当你引用它时,你指的是this.year
,这是我们存储的字段构造函数中的初始值。也就是你的代码:
public void isMagic()
{
if (month * day == year)
System.out.println("Magic");
else
System.out.println("Not Magic");
}
实际上相当于此,更清楚:
public void isMagic()
{
if (this.month * this.day == this.year)
System.out.println("Magic");
else
System.out.println("Not Magic");
}
(我更喜欢总是使用this.
表单,即使在 - 如上面的代码中 - 暗示。但是你可以将其关闭。)