如何获得使用java创建的时钟的正确输出?

时间:2016-12-01 04:30:20

标签: java class constructor stack-overflow

我的老师给了我这个任务。她给了我们一个ClockTester.java主程序,我们必须创建一个公共类,声明在Clock Tester中使用的对象和方法。下面是Tester,下面是我的clock.java代码。我无法按照自己的意愿将其格式化为00:00:00。我也把她的说明指南。

如果有人可以请,请帮帮我。 我尝试运行程序时也遇到堆栈溢出错误。

Instructions from my teacher

<!DOCTYPE html>
<html>

<head>
  <script data-require="angular.js@1.4.7" data-semver="1.4.7" src="https://code.angularjs.org/1.4.7/angular.js"></script>
    <script src="//cdnjs.cloudflare.com/ajax/libs/angular-filter/0.4.7/angular-filter.js"></script>
  <link rel="stylesheet" href="style.css" />
  <script src="script.js"></script>
</head>

<body ng-app="DemoApp"    ng-controller="akuaController">
  
 <ul class="dropdown-menu" id="search-dropdown-menu">
    <li>
        <a href="javascript:void(0);" data-ng-click="searchFilter('jurusan', '-')">
            -
        </a>
    </li>
    <li>
        <a href="javascript:void(0);" data-ng-click="searchFilter('jurusan', 'kd_jurusan')">
            Kode Jurusan
        </a>
    </li>
    <li>
        <a href="javascript:void(0);" data-ng-click="searchFilter('jurusan', 'nama_jurusan')">
            Nama Jurusan
        </a>
    </li>
</ul>

<input type="text"
    class="form-control input-sm"
    data-ng-model="search"
    placeholder="Cari data . . ."
    autofocus />
  
 </body>

</html>

3 个答案:

答案 0 :(得分:1)

Clock的{​​{1}}方法中有一个递归调用。这就是您遇到堆栈溢出错误的原因。

equals

将其更改为更合适的逻辑,以检查public boolean equals (Clock c) { boolean equiv = c.equals(c); // this keeps calling itself return equiv; } 对象的相等性。

例如,

Clock

而且,public boolean equals (Clock c) { boolean equiv = c!=null && this.hours==c.hours && this.minutes==c.minutes && this.seconds==c.seconds; return equiv; } 方法非常混乱。这也需要重写。像这样:

toString()

答案 1 :(得分:0)

toString

Clock方法的代码似乎已被破坏
 if (this.equals (this.hours ....

只是没有意义。

其次,值为00的int与0

相同

所以你的代码所做的就是返回

String.format ("%02d:%02d:%02d", hours, minutes, seconds);

答案 2 :(得分:0)

您的equals方法是递归的,并将c与自身进行比较;相反,请将cthis的字段进行比较。此外,您应该使用@Override注释。它会告诉你Object.equals需要Object。像

这样的东西
@Override
public boolean equals(Object o) {
    if (o instanceof Clock) { // <-- Is it a Clock?
        Clock c = Clock.class.cast(o); // <-- Use o as a Clock
        return c.isPM() == this.isPM() //
                && c.getHours() == this.getHours() //
                && c.getMinutes() == this.getMinutes() //
                && c.getSeconds() == this.getSeconds();
    }
    return false;
}

然后通过创建一个简单的辅助方法来填充toString(s)两位数,可以大大简化您的int方法。像,

private static String get2Digits(int i) {
    if (i < 10) {
        return "0" + i;
    }
    return String.valueOf(i);
}

然后使用它来更正toString(并使用@Override,即使您知道 toString也不接受任何参数。您可以使用StringBuilder来执行连接。

@Override
public String toString() {
    return new StringBuilder(8) //
            .append(get2Digits(hours)) //
            .append(':').append(get2Digits(minutes)) //
            .append(':').append(get2Digits(seconds)) //
            .toString();
}