Java时钟推进时间

时间:2015-11-29 21:37:03

标签: java time clock

苦苦挣扎一些java作业,为什么这不起作用?提前几分钟。如果它超过59分钟,那么它会增加我的每小时计数器。然后我检查是否小时数超过12来改变AM / PM状态。这需要反复引入数字并不断添加。我遗漏了其他代码,因为这是我本应该做的部分。

public void advance(int advance) {
   int whichAmPm = 0;
   minute += advance;
   if (minute > 59) {
       hour++;
       minute = (minute - 60);
   }
   if (hour > 12) {
       hour = (hour - 12);
       whichAmPm++;
   }
   if (whichAmPm % 2 == 0) {
        amPm = amPm;
    } else if (whichAmPm % 2 !=0) {
        if (amPm == "AM") {
            amPm = amPm.replaceAll("A", "P");
         } else {
            amPm = amPm.replaceAll("P", "A");
     }
   }
   } 

3 个答案:

答案 0 :(得分:2)

您需要循环(而不是使用if语句)。您可以使用-=(例如x -= y)代替x = x - y。并且您将Object类型(例如String)与.equals==测试引用相等进行比较。最后,您可以使用ternary operator。我想你想要的东西,

public void advance(int advance) {
    int whichAmPm = 0;
    minute += advance;
    while (minute > 59) {
        hour++;
        minute -= 60;
        if (hour > 12) { // <-- this is safe because the above increments hour once
            hour -= 12;
            whichAmPm++;
        }
    }
    if (whichAmPm % 2 != 0) {
        amPm = amPm.equals("AM") ? "PM" : "AM";
    }
}

答案 1 :(得分:1)

你可以简单地使用一些模块化数学(但是也不能忽视循环的简单性)

int hour = 8;
int min  = 30;

int advance = 125;

min += advance % 60;
hour += advance / 60;

我还考虑从...简化你的上午/下午的决定。

if (hour > 12) {
    hour = (hour - 12);
    whichAmPm++;
}
if (whichAmPm % 2 == 0) {
    amPm = amPm;
} else if (whichAmPm % 2 != 0) {
    if (amPm == "AM") {
        amPm = amPm.replaceAll("A", "P");
    } else {
        amPm = amPm.replaceAll("P", "A");
    }
}

更像是......

if (hour > 12) {
    hour = (hour - 12);
    amPm = "PM";
} else {
    ampPM = "AM";
}

但那只是我

答案 2 :(得分:1)

您的方法存在的问题是,当您添加120分钟时,它将无法运行。这是一种通过no if语句实现所需功能的简单方法。

public static final int AM = 0, PM = 1;
int hour = 0, minute = 0;
int am_pm = AM;

public void advance(int advance) {
    minute += advance;
    hour += minute / 60;
    minute %= 60;
    am_pm ^= (hour / 12 % 2);
    hour %= 12;
}