我正在编写一种将开始时间和结束时间作为参数的方法。此方法将检查并返回晚上工作时间(从18:00
到6:00
)。
我的解决方案只是从开始到结束循环运行,如果begin等于或大于18:00
,则计数器将递增1:
public static float CheckIfEveningWork(DateTime begin, DateTime end) {
float eveningWorkDuration = 0;
if (begin.getHourOfDay() > end.getHourOfDay()) {
end = end.plusHours(24);
for (float a=begin.getHourOfDay(); a<= end.getHourOfDay();a++) {
if ((a>=18)||(a<=6)) {
eveningWorkDuration++;
}
}
} else {
for (float a=begin.getHourOfDay(); a<= end.getHourOfDay();a++) {
if ((a>=18)||(a<=6)) {
eveningWorkDuration++;
}
}
}
System.out.println(end.getHourOfDay());
return eveningWorkDuration;
}
当我用
测试这个方法时begin = 17:00
end = 2:00
它返回0
。但是当我尝试时:
begin = 17:00
end = 20:00
它返回了3
。
我在解决这个问题时遇到了什么问题?
答案 0 :(得分:0)
如果我理解正确,那么你关注的是0值,是吗?不符合for语句的条件:a = begin.getHourOfDay()
,这里是17。但 a <= end.getHourOfDay()
的条件为false,for循环退出,结果为0。
你必须更仔细地考虑角落的情况。
要进行扩展,如果是begin.getHourOfDay()&gt; end.getHourOfDay(),然后你必须从begin.getHourOfDay()迭代到23和0到end.getHourOfDay()。
请改为尝试:
public static float CheckIfEveningWork(DateTime begin, DateTime end) {
float eveningWorkDuration = 0;
float beginHour = begin.getHourOfDay();
float endHour = end.getHourOfDay();
if (beginHour < endHour) {
for (float a=beginHour; a<= endHour; a++) {
if ((a>=18)||(a<=6)) {
eveningWorkDuration++;
}
}
} else {
endHour = endHour + 24;
for (float a=beginHour; a<= endHour; a++) {
if ((a>=18)||(a<=6)) {
eveningWorkDuration++;
}
}
}
System.out.println(end.getHourOfDay());
return eveningWorkDuration;
}