2012-01-28 8 views
0

Это домашнее задание, я был бы признателен за любой ответ.NullPointerException при создании объекта

Im пытается выяснить, почему я продолжаю получать исключение NullPointerException, когда я вызываю метод equals. Я создал экземпляр объекта, если я не ошибаюсь, но он все равно не работает.

Exception in thread "main" 8 
java.lang.NullPointerException 
    at labbfyra.TextBuilder.equals(TextBuilder.java:69) 
    at labbfyra.SkapaOrd.main(SkapaOrd.java:17) 

Является ли это stacktrace?

public class TextBuilder { 

    private static class Node{ 
     public char inChar; 
     public Node next; 

     public Node(char c, Node nästa){ 
      inChar = c; 
      next = nästa; 

     } 
    } 

    private Node first = null; 
    private Node last = null; 

    public TextBuilder(){ 
     first = null; 
     last = null; 
    } 

    public void append(String s){ 
     int x = s.length(); 
     for(int i=0;i<x;i++){ 


      Node n = new Node(s.charAt(i),null); 


      if(first ==null){ 
       first = n; 
       last = n; 

      }else{ 
       last.next = n; 
       last = n; 

      } 
     } 
    } 

    public int ShowSize(){ 
     int counter = 0; 

     Node n = first; 
     while(n!=null){ 
      counter++; 
      n=n.next; 
     } 
     return counter; 
    } 

    public boolean equals(String s){ 

     boolean eq = false; 
     int counter = 0; 
     char[] cArray = s.toCharArray(); 
     char[] cArrayComp = new char[10]; 


     Node n = first; 
     cArrayComp[counter] = n.inChar; 

     while(n!=null){ 
      counter++; 
      n=n.next; 
      cArrayComp[counter] = n.inChar; //THIS IS LINE 69 
     } 
     if(cArrayComp==cArray){ 
       eq = true; 
     } 
     else{ 
      eq=false; 
     } 
     return eq; 
    } 
} 
+0

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

+0

Я отредактировал сообщение, plz сообщите мне, если это правильная информация. – user1159186

+0

Проблема находится в строке 69, как указано в исключении. я не могу видеть, какая строка 69 в вашем коде –

ответ

0

На первый взгляд, выглядит как переменная счетчика в цикле, пока проходя мимо 10 вы установите размер cArrayComp в. Возможно, передаваемый параметр строки длиннее 10 символов?

+0

Ive пытался изменить это значение, а моя строка длиной 7 символов. Но должен ли он дать мне nullexinterexceptin? Должен ли он дать мне исключение для исключения из списка? – user1159186

0
public boolean equals(String s){ 

    boolean eq = false; 
    int counter = 0; 
    char[] cArray = s.toCharArray(); 

    char[] cArrayComp = new char[10]; 


    Node n = first; 

    while(n!=null){ 
     System.out.println(counter); 


     cArrayComp[counter] = n.inChar; 

     System.out.println(cArrayComp[counter]); 
     System.out.println(n.inChar); 

     n=n.next; 
     counter++; 

    } 
    if(cArrayComp==cArray){ 
      eq = true; 
    } 
    else{ 
     eq=false; 
    } 
    return eq; 
} 

Это исправленная версия, я нашел ошибку в вашем цикле. Просто проверьте мою версию. Работает на 100%

+0

Исключения: это потому, что вы сделали n.first перед циклом. Таким образом, когда запуск цикла будет сдвинут на 1. – Kursion

+0

работал отлично, я вижу проблему сейчас. Большое вам спасибо. – user1159186

+0

не забывайте +1: D! шучу – Kursion

1

В вашем цикле while вы проверяете, что n не равно null, но затем вы назначаете n.next n перед доступом к n. Проблема в том, что вы не гарантируете, что присвоенное значение (n.next) не равно нулю.

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