Java Time2Test(带用户输入)

Java Time2Test(带用户输入),java,testing,this,tostring,Java,Testing,This,Tostring,我正在寻找一些帮助,通过一个涉及用户输入的测试类来完成Time2的分配。任务是: 修改Time2类(如下)以将时间实现为午夜后的秒数。类应该有一个数据字段(一个整数,表示从午夜开始的秒数),而不是三个。此更改不应影响公共方法的参数、行为或输出。 使用main方法创建一个驱动程序类来测试Time2类。此程序应要求用户输入午夜后的小时、分钟和秒数,创建Time2对象并使用mutator方法。然后程序应使用toString()方法打印时间。 我相信唯一需要修改的是3个整数——小时、分钟、秒——变成一个

我正在寻找一些帮助,通过一个涉及用户输入的测试类来完成Time2的分配。任务是: 修改Time2类(如下)以将时间实现为午夜后的秒数。类应该有一个数据字段(一个整数,表示从午夜开始的秒数),而不是三个。此更改不应影响公共方法的参数、行为或输出。 使用main方法创建一个驱动程序类来测试Time2类。此程序应要求用户输入午夜后的小时、分钟和秒数,创建Time2对象并使用mutator方法。然后程序应使用toString()方法打印时间。 我相信唯一需要修改的是3个整数——小时、分钟、秒——变成一个整数(totalseconds)和set/get方法。我相信我的计算是正确的,但我的测试课是我的绊脚石。我想知道toString方法和toUniversalString之间是否存在问题。我可以让测试类请求用户输入,但它会在12:00:00AM时继续输出

public class Time2 {
    private int totalseconds;

    public Time2(int hour, int minute, int second)setTime
    {       
        this.totalseconds = (hour * 3600);
        this.totalseconds += (minute * 60);
        this.totalseconds += (second);
    }

    public Time2(Time2 time)setTime
    {
        this(time.getHour(), time.getMinute(), time.getSecond());
    }

    public void setTime(int hour, int minute, int second) 
    {
        if (hour < 0 || hour >= 24)
            throw new IllegalArgumentException("Hour must be 0-23");
        if (minute < 0 || minute >= 59)
            throw new IllegalArgumentException("Minute must be 0-59");
        if (second < 0 || second >= 59)
            throw new IllegalArgumentException("Hour must be 0-59");

         this.totalseconds = (hour * 3600);
         this.totalseconds += (minute * 60);
         this.totalseconds += (second);
    }

    public void setHour(int hour)
    {
        if (hour < 0 || hour >= 24)
            throw new IllegalArgumentException("Hour must be 0-23");
        this.totalseconds = (hour * 3600);
    }

    public void setMinute(int minute)
    {
        if (minute < 0 || minute >= 59)
            throw new IllegalArgumentException("Minute must be 0-59");
        this.totalseconds = (minute * 60);
    }

    public void setSecond(int second)
    {
        if (second < 0 || second >= 24)
            throw new IllegalArgumentException("Second must be 0-59");
        this.totalseconds = (second);
    }

    public int getHour()
    {
        return totalseconds / 3600;
    }

    public int getMinute()
    {
        return (totalseconds - (3600 * getHour())) / 60;
    }

    public int getSecond()
    {
        return totalseconds - (3600 * getHour()) - (60 * getMinute());
    }

    public String toUniversalString()
    {
        return String.format(
        "%02d:%02d:%02d", getHour(), getMinute(), getSecond());
    }

    public String toString()
    {
        return String.format("%d:%02d:%02d %s",((getHour() == 0 || getHour() ==
        12) ? 12 : getHour() % 12), getMinute(), getSecond(), (getHour()
        < 12 ? "AM" : "PM"));
    }
}

您使用了错误的构造函数。你有一系列的伸缩构造器,这些构造器除了迷惑你自己之外,似乎没有什么更大的作用。您可以创建一个新的
Clock
实例,如下所示:

Time2 Clock = new Time2();
您真正想要的是另一个构造函数:

public Time2(int hour, int minute, int second)
{       
    this.totalseconds = (hour * 3600);
    this.totalseconds = (minute * 60);
    this.totalseconds = (second);
}
但是,在调用它之前,请注意它接受int输入,因此您必须使用
parseInt
valueOf
解析来自扫描仪的字符串输入。在这两种情况下,您都可以获得NumberFormatException,必须捕获它

之后,请注意构造函数缺少对
setTime()
方法的调用。您将得到12:00:00,因为您从未使用用户输入设置时间

然后。。。再次注意,在构造函数中,有一系列赋值运算符(
=
),其中分钟和秒的运算符应该是
+=

这些东西都不是真正的技术性的,但它是草率的。有时候,当你陷入困境时,你需要走开,做点别的事情。然后返回并用新的眼光检查代码。坚持下去,但要休息。这些东西很快就会成为第二天性


注意:不要将实例变量命名为以大写字母开头的
Clock
。初始大小写保留用于实际类名。将实例名称保留为大小写(小写第一个字母,大写字母表示变量名中的第二个和后续单词,如此。

感谢您的反馈。我做了一些更改,但对其他一些更改感到困惑。我已经解决了运算符问题,并删除了一些多余的构造函数。并将intParse添加到我的测试类中。尽管如此,我仍然我对在哪里添加我的设置时间方法有点困惑。请参阅我的更正above@Snowbrd1只需在每个构造函数的末尾添加setTime。setTime的目的是设置时间,是吗?因此,在构造函数中输入时间后,您可以在构造函数中设置时间。仅此而已。当您看到代码神奇地工作时,请单击t他在这个答案的左边打勾,让人们知道什么是有效的。对不起,我还在学习,不太理解你的方向。我有两个构造函数,当我在每个括号后放置setTime时,我会收到语法错误请求;}。如果我理解正确,我编辑了上面的两个构造函数,但这似乎不正确。再次感谢您的帮助。公共时间2(int-hour,int-minute,int-second){this.totalseconds=(hour*3600);this.totalseconds+=(minute*60);this.totalseconds+=(second);setTime(Integer.parseInt(hour),Integer.parseInt(minute),Integer.parseInt(second));}请确保单击此答案旁边的复选标记,因为我们不再讨论您的原始问题。您应该发布一个新问题。谢谢。我不理解您的措辞方式。现在更有意义了。
public Time2(int hour, int minute, int second)
{       
    this.totalseconds = (hour * 3600);
    this.totalseconds = (minute * 60);
    this.totalseconds = (second);
}