给出以下代码:
private static class Node<T>
{
public Node<T> left;
public Node<T> right;
public T data;
public Node(T data)
{
this.data = data;
}
}
public static void chart()
{
//creating new node objects
Node<Integer> BOB = new Node<Integer>(16);
Node<Integer> Cat = new Node<Integer>(17);
Node<Integer> Charlie = new Node<Integer>(1);
find(Charlie,BOB,Cat);
}
如何在IF语句中使用对象?例如我想看看n或n.data(等于16时的整数)是否等于对象BOB(其整数为16),如下所示:
public static void find(Node<?> n,Node<?> f,Node<?> g)
{
//I also tried if (n == f) and all other combinations
if (n.data == f.data)//here is the problem
{
System.out.println("Found" + f);
}
if (n != null)
{
find(n.getLeft(), g, g);
System.out.print(n.data + " ");
find(n.getRight(), g, g);
}
}
结果应该是当n等于16时,它将等于对象BOB(因为它是16),然后执行IF语句。注意。我正在使用Organisation_chart_Traversal。
答案 0 :(得分:0)
如果您只使用数字数据类型,只需使用Number
类而不是<T>
,在其他情况下,您需要使用实现Comparable<T>
class Node<T extends Comparable<T>> implements Comparable<T>
{
Node<T> left;
Node<T> right;
T data;
Node(T data) { /*...*/ }
@Override
public int compareTo(T d) {
return data.compareTo(d);
}
}
比较节点时,请使用以下表达式if(n1.compareTo(n2) == 0)
答案 1 :(得分:-2)
注意:在此代码之前,您需要确保n
,n.data
和f
不为空。
除了==
之外,您可以使用equals
方法获取除-128..127范围之外的值。
正如@ajb
所建议的那样:当你的Integer对象的值在-128..127范围内时,==和.equals会给你相同的结果。
public static void find(Node<?> n,Node<?> f,Node<?> g) {
if (n != null && f != null && n.data != null) {
if (n.data.equals(f.data)) {
System.out.println("Found" + f); // I think you want to print f.data
}
}
if (n != null) {
find(n.getLeft(), f, g);
System.out.print(n.data + " ");
find(n.getRight(), f, g);
}
}