如何在If语句中使用对象?

时间:2015-03-10 04:48:38

标签: java object if-statement integer traversal

给出以下代码:

    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。

2 个答案:

答案 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. 0 - 对象是equel
  2. 1 - 第一个对象大于对象第二个
  3. -1 - 第一个对象少于对象第二个

答案 1 :(得分:-2)

注意:在此代码之前,您需要确保nn.dataf不为空。

除了==之外,您可以使用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);
    }
}