【发布时间】:2018-08-28 11:26:35
【问题描述】:
我想知道哪个活动更近。
现在,我编写的代码依赖于比较,而且似乎并非每次都有效。
与我尝试做的所有事情一样,我想要一个既干净又高效的解决方案(请随意批评我的代码)。
活动有一个特定的时间(例如 16:00),提示如何添加此级别的详细信息会很好。
代码如下:
public static int getNextEvent()
{
int event1 = 2; //Those events happen every week and have specific
//hours (didn't implement those because I have no
//idea how to, suggestions are greatly appreciated here)
int event2 = 6;
int result = 0;
int currentDay = 6; //Days go from monday (1) to sunday (7), here this is hardcoded, in the actual program it is not.
List<Integer> eventList = new ArrayList<Integer>();
if (currentDay <= event1) //This is the comparison I was talking about
{
eventList.add((event2-currentDay)); // These two are in this specific order because I use the indexOf for later methods (yes, those events are hardcoded, that's fine)
eventList.add((event1-currentDay)); //
}
else
{
currentDay = currentDay - 7;
eventList.add((event2-currentDay)); // These two are in this
// specific order because
// I use the indexOf for
// later methods (yes,
// those events are
// hardcoded, that's fine)
eventList.add((event1-currentDay)); //
}
result = determineClosestEvent(eventList) + 1; // I add 1 because my other methods
//do not start at 0 but at 1
//(see ^ that comment)
return result;
}
private static int determineClosestEvent(List<Integer> eventList)
{
int closestDay = 10;
int listGet;
for (int i = 0; i < eventList.size(); i++)
{
listGet = eventList.get(i);
if (closestDay > listGet)
{
closestDay = listGet;
} else {}
}
closestDay = eventList.indexOf(closestDay);
return closestDay;
}
【问题讨论】:
-
我不知道这是赋值还是什么,但如果这段代码中的一切都取决于你,你绝对应该使用为此目的而制作的结构,例如
GregorianCalendar -
@ArthurAttout,我想到了,问题是事件不是一次性的(我不能真正硬编码日期)。
-
你是什么意思,“不是一次性的事情”? GregorianCalendar 中有很多构造函数,其中一个可能就是你要找的
-
如果您的编译器支持 java 8,我建议不要使用 GregorianCalendar,并查看
java.time包,它提供了非常有用的日期和时间处理方法 -
"确定两个事件中哪一个更接近?" 更接近什么?