-4

это просто глупый вопрос, почему, черт возьми, я получаю исключение при удалении элемента ... я только что видел этот код в моей однокласснице, и когда я запускаю код и выбирает DELETE я получаю NullPointerExceptionNullPointer Исключения в LinkedList

кстати Херес код .... (где я получаю сообщение об ошибке)

    if(!(head.data).equals(del)) 
       { 
        tail=head; 
        Node temp=head.next; 
        while(temp!=null) 
        { 
         if((temp.data).equals(del)) 
         { 
          tail.next=temp.next; 
          size--; 
          break; 
         } 
         tail=temp; 
         temp=temp.next; 
        } 
       } 
       else 
       { 
        head=head.next; 
       } 
       } 
       else 
       { 
        System.out.println("LinkedList is empty"); 
       } 
       break; 

, и я очень рад, если кто-то может помочь мне с этим ....

полный код , импорт java.io. *; import java.util.LinkedList;

public class Main 
{ 
public static void main(String[]args) throws Exception 
{ 
    BufferedReader x = new BufferedReader(new InputStreamReader(System.in)); 

    LinkedList<String> list = new LinkedList<>(); 
    list.add("Jarn"); 
    list.add("Zhai"); 
    System.out.println("List:.."); 
    //System.out.println(); 
    System.out.println(list); 
    System.out.println(); 

    String ch,in,fi,del; 
    boolean kita = false; 
    int size=0,data; 
    Node head=null, tail=head; 

    do 
    { 
     System.out.println("Choose Option.\n1-Insert\n2-Delete\n3-Dispay\n4-Find\n5-Quit"); 
     System.out.println(); 
     System.out.println("Choice: "); 
     ch=x.readLine(); 
     System.out.println(); 
     switch (ch) 
     { 
      case "1": 
       System.out.println("Enter Name you Want to Insert.."); 
       in=x.readLine(); 
       list.addLast(in); 
       System.out.println("Name "+in+" was successfully inserted.."); 
       System.out.println(); 
       break; 
      case "2": 
       if(size>=0) 
       { 
       System.out.println("Enter name to del.."); 
       del=x.readLine(); 

       if(!(head.data).equals(del)) 
       { 
        tail=head; 
        Node temp=head.next; 
        while(temp!=null) 
        { 
         if((temp.data).equals(del)) 
         { 
          tail.next=temp.next; 
          size--; 
          break; 
         } 
         tail=temp; 
         temp=temp.next; 
        } 
       } 
       else 
       { 
        head=head.next; 
       } 
       } 
       else 
       { 
        System.out.println("LinkedList is empty"); 
       } 
       break; 
      case "3": 
       System.out.println("List.."); 
       System.out.println(); 
       System.out.println(list); 
       break; 
      case "4": 
       System.out.println("Enter name You Want to Find.."); 
       fi=x.readLine(); 
       while(size!=(list.size())) 
       { 
        String temp = list.get(size); 
        if(temp.equalsIgnoreCase(fi)) 
        { 
         kita=true; 
        } 
        size++; 
       } 
       if(kita) 
       { 
        System.out.println("Name: "+fi+" exists!."); 
        System.out.println(); 
       } 
       else 
        { 
         System.out.println("Name: "+fi+" not found!."); 
         System.out.println(); 
        } 
       break; 
      case "5": 
       System.out.println("Thank You.."); 
       break; 
      default: 
       System.out.println("INVALID OPTION.."); 
       System.out.println(); 
       break; 
     } 
    } 
    while(!ch.equals("5")); 
} 
    class Node 
{ 
    String data; 
    Node next; 
    Node(String d)// node class Constructor. 
    { 
     data = d; 
     next= null; 
    } 

}

}

+0

Не могли бы вы опубликовать ошибки [трассировки стека] (http://en.wikipedia.org/wiki/Stack_trace)? – Christian

+0

Исключение в теме «main» java.lang.NullPointerException \t at Main.main (Main.java:45) Java Результат: 1 – anthraxX

+0

Пожалуйста, отредактируйте свой вопрос с полной трассировкой стека. Также укажите с линией номер '45'. – Christian

ответ

2

Он чувствует, как вы пытаетесь гибридизовался пользовательский связанный список с LinkedList из рамок Java Collections. Возможно, это вас сбивает с толку.

Как выясняется, List определяет remove(Object o) функцию, которая позволит вам удалить вещи много более прямолинейно.

Это превратит ваш ВЕЬЕТЕ функция случай в:

System.out.println("Enter name to del.."); 
String del=x.readLine(); 
boolean removed = list.remove(del); 
if(removed) { 
    System.out.println(del + " was removed successfully."); 
} else { 
    System.out.println(del + " isn't in the list!"); 
} 

... и оттуда, вы можете полностью забыть о всей пользовательской Node бизнеса. Он ничего не добавляет.

Обратите внимание: del не был определен как действительная переменная в вашем исходном коде, и маловероятно, что вам когда-нибудь понадобится это снова. Он может быть встроен, но я считаю, что это лучше иллюстрирует синтаксический поток.

Правда, он сильно чувствует, что это задание направлено на имеющие вы инженер свой собственный связанный список конструкт, но я бы утроить проверить задание и с профессором/TA на этом.

+0

Я как раз собирался спросить его, в чем цель использования LinkedList Java и создания самодельного удаления, я думаю, что на вопрос был дан ответ правильно, поэтому его +1 от меня. – nmargaritis

-1

Перед удалением u необходимо найти элемент для удаления. Используйте цикл while.

в то время как (current.data! = П)

 { 

     prev=current; 

     current=current.link; 

     } 
+0

Может быть, если бы OP использовали собственную структуру узлов, и он написал реалистичную реализацию связанных списков, да. Однако, поскольку они используют простой ol '' LinkedList', использование 'remove()' является подходящим способом для этого. – Makoto

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