Java时钟前进时间

Java时钟前进时间,java,time,clock,Java,Time,Clock,正在努力完成一些java作业,为什么这不起作用?提前几分钟。如果超过59分钟,那么它将增加到我的每小时计数器。然后我检查小时数是否超过12以更改AM/PM状态。这需要反复输入数字并不断增加。我省略了其他代码,因为这是我应该能够完成的部分 public void advance(int advance) { int whichAmPm = 0; minute += advance; if (minute > 59) { hour++; minut

正在努力完成一些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
。然后将
对象
类型(如
字符串
)与
.equals
==
测试引用相等性。最后,您可以使用。我想你想要的是

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-whichAmPm=0;
分钟+=提前;
而(分钟>59){
小时++;
分钟-=60;

如果(hour>12){/你可以简单地使用一些模块化数学(但是循环的简单性也不能忽略)

我也会考虑从……/P>简化你的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;
}

amPm=amPm;
是否应该做其他事情?现在它基本上什么都不做。字符串应该通过
equals
进行比较,而不是
=
if(amPm==“AM”){
@MikeNakis其他人能够帮助我,所以也许你应该放下你的架子。宝琳,如果你看看我发表评论的时间,你会注意到我非常清楚你已经收到了你的答案。尽管如此,我相信那些回答不完整或措辞不正确的斯塔科问题的人verflow应该受到惩罚。我想你肯定让我走上了正轨。但是,我不想在while循环中使用AM/PM的if语句吗?@PaulineGonzalez不需要。该字段有一个单独的计数器。这个算法可以简化,事实上它已经内置到Java中。请看一下,以及中的类。@ElliottFrisch I在这种情况下,您不需要在小时上循环,因为它们只能前进1。@ElliottFrisch我不明白这有什么关系。当您在分钟上循环时,您的小时在分钟循环中总是只增加1。与分钟不同,小时永远不会“跳跃”,例如,从7到48,这将需要循环。@对不起,我看到的是错误的循环。很好,谢谢。
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;
}