【问题标题】:Java Magic Date AssignmentJava 魔术日期分配
【发布时间】:2014-03-09 17:23:29
【问题描述】:

1960 年 6 月 10 日这一日期很特别,因为当我们将其写成以下格式时,月乘以日等于年。 6/10/60

设计一个名为 Magic Date(DONE) 的类。类构造函数应该接受一个月、一天、一年的整数值。 (完毕)。该类还应该有一个名为 isMagic 的方法,如果传递给构造函数的日期是魔法,则返回 true,否则返回 false(我有方法 Done): 编写一个程序,要求用户输入月、日、两位数的年整数(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

【问题讨论】:

  • 您还需要在方法主体周围使用大括号。
  • @fge 它们确实存在,它们被称为truefalse。 (小写)
  • @fge 简单地说它们不存在是非常具有误导性的,更好的评论是解释它们必须是小写的。
  • 我仍然感谢所有的 cmets。无论如何,我走错了路,因为我只是忘记将提供给构造函数的参数存储在实例字段中。所以实例字段总是有它们的默认值 (0)。

标签: java


【解决方案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");
}

(我更喜欢 always 使用 this. 形式,即使 - 如您上面的代码中所暗示的那样 - 它是隐含的。但您可以不使用它。)

【讨论】:

  • 太好了,我知道我现在忘记了一些愚蠢的东西,就像一个魅力。对愚蠢的新手错误感到抱歉,非常感谢您的时间!!!!我试图为你投票,但没有足够的声誉哈哈抱歉
  • @TroyWadina 您应该仍然可以将答案标记为您问题的解决方案。
  • @JamoBox:他要等到问题发布后的 15 分钟才可以,这距离现在还有几分钟的路程。
  • 我会确保在选项可用时尽快这样做。
猜你喜欢
  • 2011-07-06
  • 1970-01-01
  • 2022-10-12
  • 2015-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-19
相关资源
最近更新 更多