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