Java 试图建立一个决策树

Java 试图建立一个决策树,java,decision-tree,Java,Decision Tree,我有这些角色,我试着做一个像这样的决策树 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

我有这些角色,我试着做一个像这样的决策树

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
不幸的是,每个角色都尝试了很多次,我想知道是否有人可以帮助我? 我试图使每个角色的尝试次数达到10次或不足10次,但我似乎无法用if语句达到50% 有什么帮助吗?
我已经把其他发色分类了,但是棕色给我带来了麻烦

不要用if-then-else

  • 创建一个名为
    Key
    的新类来保存属性
  • 确保类具有有效的
    hashCode()
    equals()
    方法
  • 创建一个
    映射
    ,并使用帖子中表格的内容对其进行初始化
  • 当您需要查找某人时,创建一个新的
    ,并设置属性值,将其用作地图中的查找键。例如:

     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";
    }
    

    条件运算符
    if
    提供0到1位的信息:

    • 如果头发颜色为棕色
      则提供零位,因为头发颜色是恒定的

    • if glasses
      提供一位,因为它将搜索空间一分为二


    使用提供完整位的测试在理论上可以通过四个测试来识别每个人。根据实际数据选择良好的测试应该可以实现这一点。但它可能要求测试的每个分支都有唯一的逻辑。例如,
    glass=yes
    可能在衬衫颜色上测试下一个,而
    glass=no
    可能在帽子上测试下一个,以便将各自的搜索空间分支分成两半。

    修复了我的问题,结果是我从错误的第一个决定开始,最终做了错误的决定。我从眼睛颜色的不同if开始,并从那里开始解决我的问题

    如果你让别人做作业,人们不会愿意做。如果陈述是我应该如何做项目的哎哟!将复杂的决策树作为一系列if-then-else语句进行处理是一种反模式,因为它们不可能理解和维护。几乎任何替代方法都比在代码中嵌入决策树好。很抱歉,你必须这样做。我希望老师会提出更好的替代方案。
    Key k = new Key(name, hair, eyes, shirt, glasses, hat, smiling, ...whatever);
    String name = map.get(key);