如何比较对象?

时间:2014-03-12 20:30:36

标签: java compare

我是Java编程的新手,我正在努力学习如何制作BST。这是我的代码:

类TreeNode:

public void insert( Town d ) {

      if ( d.compareTo(data1) < 0 ) //ERROR HERE
      {
         if ( left == null )
            left = new TreeNode( d );
         else
            left.insert( d );
      }
         else if ( d.compareTo(data1) > 0 ) //ERROR HERE
      {
         if ( right == null )
            right = new TreeNode( d );
         else
            right.insert( d );
      }
     }
}
  

错误无法找到符号

4 个答案:

答案 0 :(得分:0)

错误告诉您没有名为data1的变量。从了解二叉树的工作原理,我建议定义TreeNode成员data1来保存节点的数据。您的TreeNode课程将如下所示:

public class TreeNode {
    private int data1;

    public TreeNode (int data) {
        data1 = data;
    }

    public int getData() {
        return data1;
    }

    public void insert( Town d ) {
        if ( d.compareTo(data1) < 0 ) {
            if ( left == null )
                left = new TreeNode( d );
            else
                left.insert( d );
        } else if ( d.compareTo(data1) > 0 ) {
            if ( right == null )
                right = new TreeNode( d );
            else
                right.insert( d );
        }
    }
}

答案 1 :(得分:0)

我能够从您的问题中收集您打算在this节点的左侧或右侧插入节点。我在一些不需要的地方明确使用了关键字this,以展示我认为您打算完成的任务。

假设每个TreeNode都有一个名为town的城镇:

if (this.town.compareTo(d) < 0) 
{
    if (left == null)
        left = new TreeNode(d);
    else
        left.insert(d);
} 
else if (this.town.compareTo(d) > 0 ) 
{
    if (right == null)
        right = new TreeNode(d);
    else
        right.insert(d);
    }
}

其他答案仍然正确 - 您提到的行中的其中一个符号并不存在于您尝试使用它的范围内。它可以是data1,也可以是您的compareTo()方法。

如果Towns按人口排序,您可以使用一个简洁的数学技巧来实现您的compareTo。

public int compareTo(Town other) {
    return this.population - other.population;
}

或者,如果Town按名称排序,您可以重复使用String的compareTo方法。

    return this.name.compareTo(other.name);

在必须实现更复杂的compareTo时,如果this小于other,则返回负int,如果相等则返回0,如果this更大则返回正int比other

答案 2 :(得分:0)

在您的Town类中添加一个名为compareTo(Datatype data1)的方法。

public class Town {

public int compareTo(Town data1) {

    // compare both the object and return the coresponding value
    return 0;
}

}

答案 3 :(得分:-1)

您可以在两个对象上使用函数.equals(),这两个对象在Java中实现了通用java方法equals()和hashcode()。

hashcode()方法用于获取对象的整数值,equals()方法使用此哈希值(整数)来比较并返回一个布尔值(不管它们是否相等)。然后,您可以使用.equals()

比较对象
public void insert( Town d ) {

  if ( d.equals(data1) < 0 ) //ERROR HERE
  {
     if ( left == null )
        left = new TreeNode( d );
     else
        left.insert( d );
  }
     else if ( d.equals(data1) > 0 ) //ERROR HERE
  {
     if ( right == null )
        right = new TreeNode( d );
     else
        right.insert( d );
  }
 }
}

鉴于数据属于Town类型。您可以使用IDE自动插入这两个方法。

以下是完整的解释/示例:http://javarevisited.blogspot.ca/2011/02/how-to-write-equals-method-in-java.html