2014-01-11 4 views
-2

Я написал функцию, чтобы построить БТС из массива несортированнымJava NullPointerException: Назначают нуль

public static TreeNode buildTree(int[] a){ 
    TreeNode parent=new TreeNode(); 
    TreeNode curr=new TreeNode(); 
    curr.e=a[0]; 
    TreeNode root=curr; 
    int v; 
    for(int i=1;i<a.length;i++){ 
     curr=root; 
     v=a[i]; 
     A: while(curr!=null){ 
      if(v>=curr.e) { 
       parent=curr; 
       if(curr.right==null) break A; 
        curr=curr.right; 
      } 
      else{ 
       parent=curr; 
       if(curr.left==null) break A; 
       curr=curr.left; 
      } 
     } 
     //parent is leaf 
     if(v>=parent.e){ 
      System.out.println(parent.e); 
      parent.right=new TreeNode(); 
      parent.right.e=v; 
     } 
     else{ 
      parent.left=new TreeNode(); 
      parent.left.e=v; 
     } 
    } 
    return root; 
} 

Если я не добавить эти строки:

if(curr.left==null) break A; 
if(curr.right==null) break A; 

Я получил nullPointerException.

Я не понимаю, почему. Когда curr.left является null, тогда я назначаю curr=curr.left, не делает ли я curr=null, чем цикл while будет пробит?

Нельзя ли присвоить null объекту?

Спасибо!

+1

Опубликовать исключение в полном объеме. –

+1

, пожалуйста, открепите свой код! – OldProgrammer

+0

boxed_ | что вы имеете в виду, избегая goto? благодаря! – fuiiii

ответ

0

Приложение без исключения, когда я прокомментировал эти строки: if (curr.left == null) break A; if (curr.right == null) break A; my Code is buildTree (new int [] {1,0,1}); и результат 1, без ошибок. Можете представить более подробную информацию

+0

Извините, вы правы. Код работает без поиска (if (curr.left == null) break A; if (curr.right == null) break A;). См. Мой ответ ниже. – fuiiii

0

Ох ... Извините!

Это работает, причина, это не работает, прежде чем я забыл надстройку еще {} вокруг

parent=curr; 
    if(curr.left==null) break A; 
     curr=curr.left; 

Вот почему я NullPointerException.

if(curr.left==null) break A; 
if(curr.right==null) break A; 

Не нужно.

+1

Либо вы принимаете собственный ответ, либо удаляете свой вопрос , –

+0

Я должен подождать два дня, чтобы принять свой собственный ответ. И я не мог удалить его, так как он получил ответ. – fuiiii

Смежные вопросы