Name Hair Eyes Shirt Glasses Smiling Hat
Alice BROWN BLUE GREEN YES YES NO
Bob BROWN BROWN GREEN YES NO YES
Dave BROWN BROWN GREEN NO YES YES
Emily BROWN HAZEL RED YES YES YES
Frank BROWN GREEN GREEN YES YES NO
Isabelle BROWN HAZEL GREEN YES YES NO
Mallie BROWN BLUE RED YES YES NO
Nick BROWN BLUE RED NO YES NO
Philip BROWN GREEN RED NO YES NO
Quinn BROWN BROWN RED NO YES NO
Robert BROWN BROWN RED NO YES YES
Tucker BROWN BLUE BLUE NO YES NO
Wendy BROWN BLUE RED YES NO NO
Zander BROWN BROWN BLUE NO YES NO
我有这些角色,我正在尝试制作像
这样的决策树 if (g.hairIsColor(Color.BROWN))
{
if(g.isWearingGlasses())
{
if(g.shirtIsColor(Color.GREEN))
{
k = "Bob";
if(g.eyeIsColor(Color.GREEN))
{
k = "Frank";
}
if(g.eyeIsColor(Color.BLUE))
{
k = "Alice";
break outerloop;
}
if(g.eyeIsColor(Color.HAZEL))
{
k = "Isabelle";
}
}
if(g.eyeIsColor(Color.HAZEL))
k = "Emily";
if (g.isSmiling())
k = "Mallie";
}
else if(g.eyeIsColor(Color.BROWN))
{
if (g.shirtIsColor(Color.RED))
{
if(g.isWearingHat())
k = "Robert";
else
k = "Quinn";
}
else if(g.shirtIsColor(Color.GREEN))
k = "Dave";
else
k = "Zander";
}
else if(g.shirtIsColor(Color.RED))
{
if(g.eyeIsColor(Color.BLUE))
k = "Nick";
if(g.eyeIsColor(Color.GREEN))
k = "Philip";
}
else if(g.eyeIsColor(Color.BLUE) && g.shirtIsColor(Color.BLUE))
k = "Tucker";
}
不幸的是,每个角色花了太多次尝试,并且想知道是否有人可以帮助我? 我试图让每个角色达到10次或者不足,但我似乎无法用if语句获得50% 有帮助吗? 我已经对其他头发颜色进行了分类,但棕色给我带来了麻烦
答案 0 :(得分:1)
不要用if-then-else来做。
Key
的新类来保存属性hashCode()
和equals()
方法Map<Key,String>
并使用帖子中的表格内容对其进行初始化当您需要查找某人时,请创建一个新的Key
并设置属性的值,并将其用作地图中的查找键。如:
Key k = new Key(name, hair, eyes, shirt, glasses, hat, smiling, ...whatever);
String name = map.get(key);
答案 1 :(得分:0)
条件运算符if
提供0到1位信息:
if hair color is brown
提供零位,因为头发颜色是恒定的。
if glasses
提供一位,因为它将搜索空间分成两半。
使用提供完整位的测试可以理论识别每个人进行四次测试。根据实际数据选择好的测试应该可以解决这个问题。但它可能要求测试的每个分支都具有独特的逻辑。例如,glasses = yes
可能会测试衬衫颜色,glasses = no
可能会在帽子上测试,以便将搜索空间的各个分支分成两半。
答案 2 :(得分:0)
修正我的问题结果我从错误的第一个决定开始,因此最终做错了。我从一个不同的眼睛颜色开始,然后从那里开始解决我的问题