Java时钟推进时间

Java Clock Advancing Time

正在努力完成一些 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");
     }
   }
   } 

您需要循环(而不是使用 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";
    }
}

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

int hour = 8;
int min  = 30;

int advance = 125;

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

我还会考虑简化您的 am/pm 决策...

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";
}

但这就是我

你这个方法的问题是加120分钟就不行了。这是一种无需 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;
}