2011-11-30 14 views
6

así que tengo una lista vacía como talañadir a la lista vacía

List<Node> nodes = null; 

y luego quiero añadir s "nodo" en él

try { 
     File file = new File("test.txt"); 
     Scanner scanner = new Scanner(file); 
     while (true){ 

      String first= scanner.next(); 
      if (first.equals("-1")){ 
       break; 
      } 
      Node node1= new Node(first, first); 
      if (nodes==null){ 
       nodes.add(node1); 
      } 
      if (nodes!=null){ 
       if(nodes.contains(node1)){ 
        nodes.add(node1); 

       } 
      } 

.contains Así que, obviamente haciendo en una lista nula me da un error de excepción, pero ¿por qué hacer

if (nodes==null){ 
    nodes.add(node1); 
} 

también me da un error de puntero nulo? Parece que las listas vacías son inmutables. ¿Cómo puedo mantener una estructura de lista y aún crearla desde vacío?

Respuesta

1

Tiene que asignar memoria a la lista: nodes = new ArrayList<Node>(); antes de agregar un nodo. Está intentando agregar un nodo a una lista nula, es decir, agregar un nodo a nada.

+2

no se puede crear una instancia de la interfaz 'List' :) – Bozho

+0

Whoops, debería haber sido' ArrayList' o similar. Editaré mi respuesta. Saludos por eso. –

8
List<Node> nodes = null; 

Esto no es una lista vacía, esta es una referencia de lista que está iniitalizada a nula. Desea más bien:

List<Node> nodes = new LinkedList<Node>(); 

o similar. Esto te da una lista vacía.

EDIT: Después del cambio de la pregunta, esta lógica está completamente desordenado:

Node node1= new Node(first, first); 
if (nodes==null){ 
    nodes.add(node1); 
} 
if (nodes!=null){ 
    if(nodes.contains(node1)){ 
     nodes.add(node1); 

    } 
} 

Lo que está diciendo aquí es que si los nodos == null (que no lo es ahora), entonces tratan de agrega el nodo a la lista. Si no es nulo, y el nodo1 ya está en la lista (que no es), agréguelo a la lista. Puede reemplazar las líneas de arriba con:

if (!nodes.contains(node1)) { 
    nodes.add(node1); 
} 

que dice que si el nodo no existe en la lista, agréguelo.

1

Necesitas inicializar la lista primera

nodes = new ArrayList<Node>(); 

por ejemplo:

if (nodes==null){ 
    nodes = new ArrayList<Node>(); 
    nodes.add(node1); 
} 

pero en realidad es mejor tener una lista vacía en lugar de una lista no inicializaron (nulo) .

Así que en lugar de: List<Node> nodes = null; tienen List<Node> nodes = new ArrayList<Node>(); continuación, se puede quitar la completa if y utilizar siempre nodes.add(node1);, no importa si es el primero o el segundo elemento.

0
nodes = new ArrayList<Node>(); 

Inicializarlo en un objeto nuevo (vacío) debería ayudar.

+0

Acabo de cometer el mismo error, no puede crear una 'Lista', tiene que ser una 'Lista de Arreglos' o 'ListaEnlazada', etc. –

+0

¡por supuesto! Gracias por señalarlo. Todavía en modo C#, supongo :) – abhinav

+0

Jaja sin preocupaciones. Recibí un comentario diciéndome lo mismo con mi respuesta. Estoy en modo C++. –

1

si nodes es null, no puede hacer nada con eso. Inícielo en new ArrayList<Node>(). Esta es ahora una lista vacía.

0

se trata de una excepción de puntero Seguro nulo como nodes es nulo

Quiso decir

if (nodes!=null){ 
    nodes.add(node1); 
} 

lista también inicializar

nodes = new ArrayList() 
1

Esto se debe a que no han instanciado sus nodos de objetos " ".

Añadir la siguiente línea y debería funcionar:

if (nodes==null){ 
     nodes = new ArrayList<Node>(); 
     nodes.add(node1); 
    } 

También tenga en cuenta que no se puede crear instancias de objetos de lista. Así que usted puede usar algo como ArrayList/ListaEnlazada etc.

0

Usted node es null por lo que este es el error como todo dicho ... esto es error de programación más común para conseguir un null pointer exception. Es mejor que uses el complemento findbug con tu eclipse; no te permitirá crear este tipo de error. También será más fácil para usted detectar el problema.

Cuestiones relacionadas