对于我的任务,我们假设要制作一个时钟。我们需要小时,分钟和秒的变量以及setHours / getHours,setMinutes / getMinutes,setSeconds / getSeconds等方法。我还需要一个addClock()方法来实现两个时钟对象的总和以及一个减少时钟的tickDown()方法。此外,我需要一个tick()方法,将Clock对象增加一秒。
这是我到目前为止所拥有的......
public class Clock {
private int hr; //store hours
private int min; //store minutes
private int sec; //store seconds
// Default constructor
public Clock () {
setClock (0, 0, 0);
}
public Clock (int hours, int minutes, int seconds) {
setClock (hours, minutes, seconds);
}
public void setClock (int hours, int minutes, int seconds) {
if (0 <= hours && hours < 24)
hr = hours;
else
hr = 0;
if (0 <= minutes && minutes < 60)
min = minutes;
else
min = 0;
if (0 <= seconds && seconds < 60)
sec = seconds;
else
sec = 0;
}
public int getHours() {
return hr;
}
public int getMinutes() {
return min;
}
public int getSeconds() {
return sec;
}
public void addClock( Clock secondClock ) {
this.sec += secondClock.getSeconds();
this.min += secondClock.getMinutes();
//add overflow to minutes from seconds
this.min +=(int)(this.sec/60);
//update seconds
this.sec = this.sec % 60;
this.hr += secondClock.getHours();
//add overflow to minutes from seconds
this.hr +=(int)(this.min/60);
//update minutes
this.min = this.min % 60;
//adjust hours
this.hr = this.hr % 24;
}
public void tick(){
this.sec += 1;
//add overflow to minutes from seconds
this.min +=(int)(this.sec/60);
//update seconds
this.sec = this.sec % 60;
//add overflow to minutes from seconds
this.hr +=(int)(this.min/60);
//update minutes
this.min = this.min % 60;
//adjust hours
this.hr = this.hr %24;
}
public void tickDown(){
this.sec -= 1;
if(this.sec <0){
this.sec+=60;
this.min-=1;
}
if(this.min<0){
this.min+=60;
this.hr-=1;
}
if(this.hr<0){
this.hr+=24;
}
}
}
答案 0 :(得分:3)
您可以写下addClock()
,如下所示:
public void addClock(Clock secondClock){
this.second += secondClock.getSecond();
this.minute+= secondClock.getMinute();
//add overflow to minutes from seconds
this.minute+=(int)(this.second/60);
//update seconds
this.second = this.second % 60;
this.hour += secondClock.getHour();
//add overflow to minutes from seconds
this.hour+=(int)(this.minute/60);
//update minutes
this.minute= this.minute% 60;
//adjust hours
this.hour = this.hour%24;
}
同样地,您可以编写tick
和tickDown
方法,唯一的区别是您不会在方法中有任何参数,并且您需要在添加减去1秒后重新调整分钟和小时强>
public void tick(){
this.second += 1;
//add overflow to minutes from seconds
this.minute+=(int)(this.second/60);
//update seconds
this.second = this.second % 60;
//add overflow to minutes from seconds
this.hour+=(int)(this.minute/60);
//update minutes
this.minute= this.minute% 60;
//adjust hours
this.hour = this.hour%24;
}
public void tickDown(){
this.second -= 1;
if(this.second <0){
this.second+=60;
this.minute-=1;
}
if(this.minute<0){
this.minute+=60;
this.hour-=1;
}
if(this.hour<0){
this.hour+=24;
}
}
将main
方法添加为:
public static void main(String[] args){
Clock clock1 = new Clock(2,4,7);
Clock clock2 = new Clock(8,26,57);
clock1.tick();
int newSeconds = clock1.getSeconds();
//validate it should be 8 now
clock2.tickDown();
newSeconds = clock1.getSeconds();
//validate it should be 56 now
clock1.addClock(clock2);
//get Hour, minute and second from clock1 and validate
int newHour = clock1.getHours();
int nuwMinute = clock1.getMinutes();
newSeconds = clock1.getSeconds();
//validate if they are with the right expected value or not
}
答案 1 :(得分:1)
您可以通过维持刻度来简化刻度逻辑。 从刻度值中提取小时,分钟和秒。
public Clock
{
long ticks = 0;
public void tick()
{
ticks++;
}
public void tickDown()
{
ticks--;
}
public int getSeconds()
{
return ticks % 60;
}
public int getMinutes()
{
return (ticks / 60) % 60;
}
public int getHours()
{
return (ticks / (60 * 60)) % 24;
}
}
答案 2 :(得分:0)
您必须了解有关Java语言的更多信息。 ; - )
if( condition ) { /* no ';' here */
<block when true>
}
else {
<block when false>
}
主要缺失,我建议
public static void main( String args[] ) {
Clock c1 = new Clock( 9, 59, 59 );
c1.tickSeconds();
System.err.println( c1 ); // You have to overload toString()
}