2013-01-16 232 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