【问题标题】:How do you use objects in an If statement?如何在 If 语句中使用对象?
【发布时间】:2015-03-10 04:48:38
【问题描述】:

给定以下代码:

    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。

【问题讨论】:

  • 你参数nfg是什么意思?你不应该将f 传递给find 的后续调用吗?
  • 参数 n、f 和 g 是我输入到将用作整数的方法中的三个对象。所以查理 = 1,鲍勃 = 16,猫 = 1。
  • 是的,但这是什么意思?它们的描述性不是很强,因此很难确定它们扮演的角色......
  • 你为什么用Node&lt;?&gt;
  • 这个问题毫无意义。您的评论说您有三个输入,其中两个具有相同的数据,但是您的程序有三个对象,它们都具有不同的数据。您在“这就是问题所在”的行上有一条评论,但无论您如何切片,您似乎都在比较两个不同的整数,因此没有迹象表明问题出在哪里。您引用了您未定义的 getLeftgetRight 方法,并且您不知道如何设置 leftright 字段。

标签: java object if-statement integer traversal


【解决方案1】:

如果您只使用数字数据类型,只需使用Number 类而不是&lt;T&gt;,在其他情况下,您需要使用实现Comparable&lt;T&gt;

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 - 第一个对象小于第二个对象

【讨论】:

    【解决方案2】:

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

    您可以使用equals 方法代替-128..127 范围以外的值,而不是使用==

    正如@ajb 所建议的那样:当您拥有值在 -128..127 范围内的 Integer 对象时,== 和 .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);
        }
    }
    

    【讨论】:

    • 我试过它不起作用这个异常出现:在 Organisation_Chart_Traversal.find(Organisation_Chart_Traversal.java:207)
    • 请注意,这不会对 OP 的示例产生影响。当 Integer 对象的值在 -128..127 范围内时,==.equals 会给你相同的结果。
    • @ZSoftwareundergraduate 你认为我们都知道Organisation_Chart_Traversal 是什么吗?
    • @ZSoftwareundergraduate,请提供完整的堆栈跟踪
    • 您能否将chart() 的代码包装在try catch block 中并在catch 块中打印e.printStackTrace()。并发布完整的堆栈跟踪。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多