Extending this question,我已经接受了一个答案,说明在这种情况下使用查找表或散列映射,因为它是处理多个条件的更好的构造.
当前构造.
Class to store messages.
public class ProgressMessages
{
public static String msg1="Welcome here .....";
.
.
.
//around 100 more similar static variables.
}
Condition and Display the proper message from the above class.
int x=calculatedVal1(m,n);
int y=calculatedVal2(o,q);
SimpleDateFormat formater=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date d=new Date();
String s=formater.format(d);
try {
long d1 = formater.parse("2013-01-10 13:53:01").getTime();
long d2=formater.parse(s).getTime();
totaldays=Math.abs((d1-d2)/(1000*60*60*24));
} catch (ParseException e) {
e.printStackTrace();
}
if(totaldays<7&&x<20)
{
System.out.println("my message...1"+ProgressMessages.msg1);
}
else if(totaldays<7&&x>10&&y<20)
{
System.out.println("my message...2"+ProgressMessages.msg2);
}
....
//obvioulsy 100 more else-if's to display 100 messages.
I actually would like to know how would a look-up table help in this
case?
应该如何在java Hashmap / Hashtable等中实现,有什么好处呢?
– – 编辑 – –
我要去@assylias anwer申请更干净.但如果我使用Enums,那么我有一个修复.
描述大局……
即消息列表就像……
1)“欢迎”,nameOfUser“你的成功率是”succssRate“%”早些时候它早于“%”.
2)“哦是的..”succssRate“%”从之前的“%”改进.
3.)“现在你应该专注于”exerCiseName.
我怎么能使用Enumeration来做这件事,因为它有固定的String数据.我可以制作不同的构造函数吗?如何用assylas的编辑代码回答?
解决方法:
我会用一个
Map<Criteria, Message> lookupTable;
Criteria是您编写的类(并覆盖equals()和hashCode()),表示选择消息的条件.
Message也是您编写的类,它封装了实际的消息String,但也为您提供了一些设置变量的功能.
使用此解决方案,您必须在程序开头一次初始化地图,并且始终可以像这样使用它:
Criteria criteria = ... // gather your criteria somehow
Message msg = lookupTable.getMessage(criteria);
// use your variable setting methods here
String message = msg.toString();