Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么我的binary node equals方法抛出断言错误? 公共类二进制树节点{ 私有二叉树左; 私有二元树节点权; 私有T数据; 公共二元树节点(){ 这个(空,空,空); } 公共二进制树节点(T数据){ 这(数据,null,null); } 公共二进制树节点(T theData,二进制树节点leftChild,二进制树节点righchild){ 数据=数据; left=leftChild; 右=右子女; @凌驾 公共布尔等于(对象o){ if(二进制树节点的o实例){ 二叉树烯醇n1=(二叉树烯醇)o; if(this.getLeft()==null&&n1.getLeft()==null&&this.getRight()==null&&n1.getLeft()==null){ 返回this.data==n1.getData(); } if(this.getRight()==null&&n1.getRight()==null&&this.getLeft()!=null&&n1.getLeft()!=null){ 返回this.data==n1.getData(); } if(this.getLeft()==null&&n1.getLeft()==null&&this.getRight()!=null&&n1.getRight()!=null){ 返回this.data==n1.getData(); }否则{ 返回false; } } } 公共类二进制树测试{ 二元树节点15=新的二元树节点(5); 二元树烯节点2=新的二元树烯节点(5); @试验 public void testEqualsObjectNode(){ assertTrue(node15.equals(node2)); assertFalse(node1.equals(node2)); }_Java_Binary Tree_Junit4_Equals - Fatal编程技术网

Java 为什么我的binary node equals方法抛出断言错误? 公共类二进制树节点{ 私有二叉树左; 私有二元树节点权; 私有T数据; 公共二元树节点(){ 这个(空,空,空); } 公共二进制树节点(T数据){ 这(数据,null,null); } 公共二进制树节点(T theData,二进制树节点leftChild,二进制树节点righchild){ 数据=数据; left=leftChild; 右=右子女; @凌驾 公共布尔等于(对象o){ if(二进制树节点的o实例){ 二叉树烯醇n1=(二叉树烯醇)o; if(this.getLeft()==null&&n1.getLeft()==null&&this.getRight()==null&&n1.getLeft()==null){ 返回this.data==n1.getData(); } if(this.getRight()==null&&n1.getRight()==null&&this.getLeft()!=null&&n1.getLeft()!=null){ 返回this.data==n1.getData(); } if(this.getLeft()==null&&n1.getLeft()==null&&this.getRight()!=null&&n1.getRight()!=null){ 返回this.data==n1.getData(); }否则{ 返回false; } } } 公共类二进制树测试{ 二元树节点15=新的二元树节点(5); 二元树烯节点2=新的二元树烯节点(5); @试验 public void testEqualsObjectNode(){ assertTrue(node15.equals(node2)); assertFalse(node1.equals(node2)); }

Java 为什么我的binary node equals方法抛出断言错误? 公共类二进制树节点{ 私有二叉树左; 私有二元树节点权; 私有T数据; 公共二元树节点(){ 这个(空,空,空); } 公共二进制树节点(T数据){ 这(数据,null,null); } 公共二进制树节点(T theData,二进制树节点leftChild,二进制树节点righchild){ 数据=数据; left=leftChild; 右=右子女; @凌驾 公共布尔等于(对象o){ if(二进制树节点的o实例){ 二叉树烯醇n1=(二叉树烯醇)o; if(this.getLeft()==null&&n1.getLeft()==null&&this.getRight()==null&&n1.getLeft()==null){ 返回this.data==n1.getData(); } if(this.getRight()==null&&n1.getRight()==null&&this.getLeft()!=null&&n1.getLeft()!=null){ 返回this.data==n1.getData(); } if(this.getLeft()==null&&n1.getLeft()==null&&this.getRight()!=null&&n1.getRight()!=null){ 返回this.data==n1.getData(); }否则{ 返回false; } } } 公共类二进制树测试{ 二元树节点15=新的二元树节点(5); 二元树烯节点2=新的二元树烯节点(5); @试验 public void testEqualsObjectNode(){ assertTrue(node15.equals(node2)); assertFalse(node1.equals(node2)); },java,binary-tree,junit4,equals,Java,Binary Tree,Junit4,Equals,请帮我弄清楚为什么equals方法没有通过junit测试。我做了主方法测试,它应该与我一直得到的断言错误完全相同。我甚至添加了一个toString方法来检查,我得到的两个节点的字符串完全相同,那么为什么它声称它不相等呢?首先 public class BinaryTreeNode<T> { private BinaryTreeNode<T> left; private BinaryTreeNode<T> right; private T data; pub

请帮我弄清楚为什么equals方法没有通过junit测试。我做了主方法测试,它应该与我一直得到的断言错误完全相同。我甚至添加了一个toString方法来检查,我得到的两个节点的字符串完全相同,那么为什么它声称它不相等呢?

首先

public class BinaryTreeNode<T> {

private BinaryTreeNode<T> left;
private BinaryTreeNode<T> right;
private T data;

public BinaryTreeNode(){
    this(null,null,null);
}

public BinaryTreeNode(T theData){
    this(theData,null,null);
}

public BinaryTreeNode(T theData, BinaryTreeNode<T> leftChild, BinaryTreeNode<T> rightChild){
    data = theData;
    left = leftChild;
    right = rightChild;

   @Override
public boolean equals(Object o){
        if(o instanceof BinaryTreeNode<?>) {
           BinaryTreeNode<?> n1 = (BinaryTreeNode<?>) o;
           if(this.getLeft() == null && n1.getLeft() == null && this.getRight() == null && n1.getLeft() == null) {
               return this.data == n1.getData();
           }
         if(this.getRight() == null && n1.getRight() == null && this.getLeft() != null && n1.getLeft() != null) {
             return this.data == n1.getData();
         }
         if(this.getLeft() == null && n1.getLeft() == null && this.getRight() != null && n1.getRight() != null) {
             return this.data == n1.getData();
         } else {

          return false;
         }
     }
}

public class BinaryTreeTesting {
BinaryTreeNode<Integer> node15 = new BinaryTreeNode<Integer>(5);
BinaryTreeNode<Integer> node2 = new BinaryTreeNode<Integer>(5);

  @Test
   public void testEqualsObjectNode() {
   assertTrue(node15.equals(node2));
   assertFalse(node1.equals(node2));

}
是不正确的,应该是

if(this.getLeft() == null && n1.getLeft() == null && this.getRight() == null && n1.getLeft() == null) {
其次,在第二个和第三个
if
s中,您没有比较左右节点是否相等。例如,在第二个分支上,您只检查右子树是否不为null,左子树是否为null。但您没有检查左子树是否相同

第三,看起来您缺少了一些花括号

if(this.getLeft() == null && n1.getLeft() == null && this.getRight() == null && n1.getRight() == null) {
公共类二进制树节点{
私有二叉树左;
私有二元树节点权;
私有T数据;
公共二元树节点(){
这个(空,空,空);
}
公共二进制树节点(T数据){
这(数据,null,null);
}
公共二进制树节点(T theData,二进制树节点leftChild,二进制树节点righchild){
数据=数据;
left=leftChild;
右=右子女;
}
公共二进制树节点getLeft(){
左转;
}
公共void setLeft(二进制树节点左){
this.left=左;
}
公共二进制树节点getRight(){
返还权;
}
公共无效设置权限(二进制树节点权限){
这个。右=右;
}
公共T getData(){
返回数据;
}
公共无效设置数据(T数据){
这个数据=数据;
}
公共布尔等于(对象o){
if(二进制树节点的o实例){
二叉树烯醇n1=(二叉树烯醇)o;
if(this.getLeft()==null&&n1.getLeft()==null&&this.getRight()==null&&n1.getRight()==null){
返回this.data==n1.getData();
}
if(this.getRight()==null&&n1.getRight()==null&&this.getLeft()!=null&&n1.getLeft()!=null){
返回this.data==n1.getData();
}
if(this.getLeft()==null&&n1.getLeft()==null&&this.getRight()!=null&&n1.getRight()!=null){
返回this.data==n1.getData();
}否则{
返回false;
}
}
返回false;
}
公共静态void main(字符串参数[]){
二元树节点15=新的二元树节点(5);
二元树烯节点2=新的二元树烯节点(5);
二元树节点1=新的二元树节点(1);
System.out.println(node15.equals(node2));
System.out.println(node1.equals(node2)=false);
}
}

什么是
节点1
?哪个测试失败了?@TedHopp assertTrue测试失败了!如果两个条目具有完全相同的对象,或者它们基本上是相等的,那么它们是相等的吗?
=
比较相同的对象,而
等于
方法比较它们是否相同。我认为@Compass已经诊断出了这个问题m、 你应该使用
this.data.equals(n1.getData())
来测试数据的相等性。不是。你的*单元测试方法是。请准确。这并不能解释测试失败,因为测试中涉及的所有节点显然都有
null
左右节点。啊,是的,OP覆盖了equals()函数,但仅在两个构造函数中的一个中使用。他在测试用例中没有使用该构造函数。将更新我的答案。@harshpatel991等待您做了什么更改?@ari我在
right=righchild;
之后添加了一个右括号。我刚刚尝试了我的代码,结果是
true
public class BinaryTreeNode<T> {

    private BinaryTreeNode<T> left;
    private BinaryTreeNode<T> right;
    private T data;

    public BinaryTreeNode() {
        this(null, null, null);
    }

    public BinaryTreeNode(T theData) {
        this(theData, null, null);
    }


    public BinaryTreeNode(T theData, BinaryTreeNode<T> leftChild, BinaryTreeNode<T> rightChild) {
        data = theData;
        left = leftChild;
        right = rightChild;

    }

    public BinaryTreeNode<T> getLeft() {
        return left;
    }

    public void setLeft(BinaryTreeNode<T> left) {
        this.left = left;
    }

    public BinaryTreeNode<T> getRight() {
        return right;
    }

    public void setRight(BinaryTreeNode<T> right) {
        this.right = right;
    }

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }

    public boolean equals(Object o) {
        if (o instanceof BinaryTreeNode<?>) {
            BinaryTreeNode<?> n1 = (BinaryTreeNode<?>) o;
            if (this.getLeft() == null && n1.getLeft() == null && this.getRight() == null && n1.getRight() == null) {
                return this.data == n1.getData();
            }
            if (this.getRight() == null && n1.getRight() == null && this.getLeft() != null && n1.getLeft() != null) {
                return this.data == n1.getData();
            }
            if (this.getLeft() == null && n1.getLeft() == null && this.getRight() != null && n1.getRight() != null) {
                return this.data == n1.getData();
            } else {

                return false;
            }
        }
        return false;


    }


    public static void main(String args[]) {

        BinaryTreeNode<Integer> node15 = new BinaryTreeNode<Integer>(5);
        BinaryTreeNode<Integer> node2 = new BinaryTreeNode<Integer>(5);
        BinaryTreeNode<Integer> node1 = new BinaryTreeNode<Integer>(1);

        System.out.println(node15.equals(node2));
        System.out.println(node1.equals(node2) == false);

    }

}