苦苦挣扎一些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");
}
}
}
答案 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;
}