假设您正在尝试创建此时钟:
我有TimerTask
,每10秒返回int hour
和int minute
。
我遇到的第一个解决方案是多个switch
语句,但这很快就会失控。它可以工作,但可能有一个更优雅的解决方案来处理所有不同的情况。你有更好的想法吗?
所有建议都表示赞赏。谢谢!
答案 0 :(得分:1)
你可以选择开关它完全可行,但你可以把钟面分成12块,然后没有任何开关声明。
boolean past = true;
int i = (minutes + 2) / 5; // +2 because if it's 58 min past 7 you wanna get 8 o'clock
if(i > 6){ //we're on the left side of clock face
i = 12 - i;
hours++;
past = false;
}
}
您所要做的就是添加switch语句或包含正确字符串值的索引数组。例如:
String[] array = {"", "five minutes", "ten minutes", "quater", "twenty minutes", "twenty five minutes", "half"};
String result = "It is " + array[i] + ((i!=0)?(past? " past ":" to "):"" + hours_array[hours] + (i==0)?" o'clock":"";
答案 1 :(得分:1)
让我为你分组吧。
“它是”和“点”是固定的。不要包括它们 半 - 十 - 四 - 二十五:是第一组 分钟 - 过去:是第二组 一 - 三 - 二 - 四 - 五 - 六 - 七 - 八 - 九 - 十 - 十一 - 十二:是第三组
所以让我们从第二组开始。如果分钟小于30“过去”,如果更多“分钟”是真的
然后,如果“过去”为真,则第一组指示分钟(分钟 - 分钟%5),如果“分钟到”为真,则第一组指示为60分钟。
此外,如果“过去”为真,则第三组表示小时,但如果“分钟到”为真,则第三组表示小时+ 1。
Date date = new Date();
int hours = date.getHours();
if (hours==0) hours = 12;
if (hours>12) hours -= 12;
int minutes = date.getMinutes();
minutes -= minutes%5;
// minutes could be more accurate
if (minutes<30) {
switch (minutes) {
case 5:
// turn on five
break;
case 10:
// turn on ten
break;
case 15:
// turn on quarter
break;
case 20:
// turn on twenty
break;
case 25:
// turn on twenty and five
break;
}
// turn on "past"
// put a switch here for the hours
} else if (minutes == 30) {
// turn on half and past
// put a switch here for the hours
} else { // turn on "minutes to"
switch (minutes) {
case 35:
// turn on twenty and five
break;
case 40:
// turn on twenty
break;
case 45:
// turn on quarter
break;
case 50:
// turn on ten
break;
case 55:
// turn on five
break;
// turn on "past"
// put a switch here for the hours
}
代码没有完成,但它会给你一个想法。