2013-01-16 191 views
0

我试图运行我的Binary Search Tree,我在我的主程序中创建Employee类型的对象,但似乎并未给我带来问题,但是当我选择在我的BST中搜索某个项目时,该程序被终止。二进制搜索树,搜索方法

System.out.println("Searching the Binary Search Tree"); 
         System.out.println("Enter surname to search for:"); 
         String choice2 = sc.nextLine(); 
         BinaryNode a = temp.search(choice2); 
         Employee newEmp = (Employee) a.obj; 
         if (a == null) 
          { 
           System.out.println("Not Found"); 
          } 
         else 
          { 
           System.out.println(newEmp.getData()); 
          } 
         break; 
        } 

当程序终止时,它指向给定的线

Employee newEmp = (Employee) a.obj; 

和错误是,java.lang.NullPointerException: null

谁能告诉我,为什么发生这种情况吗?

+5

因为'temp.search(choice2);'返回'null'? –

+0

我展示了我的搜索方法,可以吗? – user1928374

回答

2

您无法访问null对象的.obj。 检查后是否应该移动一个== null。

System.out.println("Searching the Binary Search Tree"); 
        System.out.println("Enter surname to search for:"); 
        String choice2 = sc.nextLine(); 
        BinaryNode a = temp.search(choice2); 
        if (a == null) 
         { 
          System.out.println("Not Found"); 
         } 
        else 
         { 
          Employee newEmp = (Employee) a.obj; 
          System.out.println(newEmp.getData()); 
         } 
        break; 
       } 
+0

哦,这是有道理的,现在我又遇到了另一个问题,当我运行程序时,程序跳过了输入姓氏的部分,可能是因为我的sc.nextLine()?不知道它 – user1928374

0

你可以请检查temp.search(choice2)是否返回一个非空值?带空引用会导致此类错误

除了确保您为BinaryNode a执行的演员确实是Employee。 (虽然这是不相关的NullPointerException异常)

+0

这不是导致错误的演员,它是成员访问。将'null'投射到任何对象类型都可以正常工作。 – MvG

0

search方法可以返回null,所以你应该重新组织你的代码,并添加一行Employee newEmp = (Employee) a.obj;到的条件else一部分。

+0

哦,这是有道理的,现在我又遇到了另一个问题,当我运行该程序时,程序跳过了输入姓氏的部分,可能是因为我的sc.nextLine()?并不确定 – user1928374