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