【发布时间】:2012-12-24 12:56:40
【问题描述】:
Extending this question,我已经接受了一个答案,即 使用查找表或哈希映射 用于这种情况,因为它会是一个更好的处理多个条件的构造。。 p>
当前构造。
用于存储消息的类。
public class ProgressMessages
{
public static String msg1="Welcome here .....";
.
.
.
//around 100 more similar static variables.
}
条件并显示来自上述类的正确消息。
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.
我实际上想知道查找表对此有何帮助 案例?
应该如何在java Hashmap/Hashtable等中实现,有什么好处呢?
----编辑---
我选择@assylias anwer,因为它更干净。但是如果我使用 Enums,那么我就有了解决办法。
描述全局...
即消息列表就像...
1) "Welcome," + nameOfUser+"你的成功率是"+ succssRate +"%"+ 之前是+earlier +"%"。
2) “哦,是的..”+ succssRate +“%”+ 从 +earlier +“%” 改进。
3.) “现在你应该专注于”+exerCiseName。
我如何使用枚举来做到这一点,因为它具有固定的字符串数据。我可以制作不同的构造函数吗? assylas 的编辑代码示例如何回答?
【问题讨论】:
-
这基本上都在answer you accepted 中。优点是它比 if/else 树更快,因为您可以根据您的条件计算索引并在恒定时间内进行查找。实现它的最简单方法是简单的
String[]。 -
@jlordo 我怎么能记住 String[] 中变量的索引,但是使用具有正确含义的变量名会更符合语义,这就是我在这里不使用 String[] 的原因。那么我如何在代码中实现它,你能修改它或进一步解释。
-
查看other answer。您使用您的条件来计算索引,然后使用存储在该索引处的消息。这是一种干净的方法,可以在恒定时间内工作,并且避免了大的 if then else 混乱。
-
@jlordo 我认为实现起来并不容易。特别是,可能有超过 32 种不同的条件,因此使用 32 位密钥 + 位移将无法考虑所有可能的组合。
-
@pKs:现在我确定我们正在谈论 Y :) 这是另一个很好的描述:What is the XY problem?。您可以将变量放入字符串中并使用
String.format()。但是为什么你有 100+ 条欢迎信息的条件???当您向我们描述您正在尝试做的事情(大图)时,我们可能会为您提供更好的解决方案。
标签: java collections lookup