【问题标题】:Java Clock Advancing TimeJava 时钟提前时间
【发布时间】:2016-03-03 11:44:07
【问题描述】:

为一些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");
     }
   }
   } 

【问题讨论】:

  • amPm = amPm; 应该做点别的吗?现在它基本上什么都不做。
  • 字符串应该通过equals而不是==进行比较:if (amPm == "AM") {
  • @MikeNakis 其他人能帮助我,所以也许你应该下马。
  • Pauline,如果您查看我发表评论的时间,您会发现我非常清楚您已收到您的答复。尽管如此,我确实相信那些在 stackoverflow 上回答不完整或表述错误的问题的人应该受到惩罚。 youtube.com/watch?v=L9nXfffeAIU

标签: java time clock


【解决方案1】:

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

【讨论】:

  • 我想你肯定让我走上正轨。但是,我不想在 while 循环中使用 AM/PM 的 if 语句吗?
  • @PaulineGonzalez 不需要。您对该字段有一个单独的计数器。这个算法可以简化,实际上它已经内置在 Java 中。看看TimeUnit,以及java.time 中的类。
  • @ElliottFrisch 在这种情况下,您不需要循环多个小时,因为它们只能提前 1。
  • @ElliottFrisch 我看不出这有什么关系。当您循环播放分钟时,您的小时总是在分钟循环内仅增加 1。与分钟不同,小时永远不能“跳跃”,例如,从 7 到 48,这需要循环。
  • @nautical 抱歉,我看错了循环。好点子。谢谢。
【解决方案2】:

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

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

但那只是我

【讨论】:

    【解决方案3】:

    您的方法的问题是,当您添加 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;
    }
    

    【讨论】:

      猜你喜欢
      • 2019-10-25
      • 2021-03-14
      • 1970-01-01
      • 2014-01-15
      • 2017-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多