Java - Duda con ejercicio de positionList

 
Vista:

Duda con ejercicio de positionList

Publicado por Alfredo (1 intervención) el 02/10/2018 19:38:16
Hola, como comento en el titulo tengo un ejercicio de positionList que me han mandado en la universidad.
El enunciado basicamente se trata de que ellos t van a mandar una lista (ej. [3,3,2,3,2,1,1,1,null] ) y tu la tienes que compactar eliminando las repeticiones consecutivas en una nueva lista (la nueva lista quedaria asi [3,2,3,2,1,null]).
Como en el ejemplo indicado, puede haber null en la lista.
Este es elcodigo que yo incorporo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
package aed.individual3;
 
import es.upm.aedlib.Position;
import es.upm.aedlib.positionlist.NodePositionList;
import es.upm.aedlib.positionlist.PositionList;
 
public class OperacionCompactar {
	/**
	 * Metodo que reduce los elementos iguales consecutivos de una lista a una 
	 * unica repeticion
	 * @param lista Lista de entrada
	 * @return Lista nueva compactada sin elementos iguales consecutivos
	 */
	public <E> PositionList<E> compactar (PositionList<E> lista) {
 
		if(lista==null) {
			throw new IllegalArgumentException();
		}
 
 
		PositionList<E> nuevaLista= new NodePositionList<E>();
 
 
		for(Position<E> puntero=lista.first(); puntero!=null; puntero=lista.next(puntero)) {
			if(puntero.element()!=null && puntero.element().equals(nuevaLista.last().element())) {
 
			}
			else if(puntero.element()!=null && !(puntero.element().equals(nuevaLista.last().element()))) {
				nuevaLista.addLast(puntero.element());
			}
			else if(puntero.element()==null && puntero.element()==(nuevaLista.last().element())) {
 
			}
			else if(puntero.element()==null && !(puntero.element().equals(nuevaLista.last().element()))) {
				nuevaLista.addLast(puntero.element());
			}
			else if(puntero.element()!=null && nuevaLista.last().element()==null) {
				nuevaLista.addLast(puntero.element());
				}
			}
 
		return nuevaLista;
 
	}
}


y este el error que me da:

java.lang.NullPointerException
at aed.individual3.OperacionCompactar.compactar(OperacionCompactar.java:25)
at aed.individual3.TesterInd3.do_check(TesterInd3.java:197)
at aed.individual3.TesterInd3.main(TesterInd3.java:51)
Exception in thread "main" java.lang.Error: Error en test: resultado incorrecto
at aed.individual3.TesterInd3.do_check(TesterInd3.java:210)
at aed.individual3.TesterInd3.main(TesterInd3.java:51)

*** Tester Error (Entrega Individual 3): NO se esperaba la excepcion: java.lang.NullPointerException


El método fue invocado con [1]


Agradecere toda la ayuda.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Sebastian
Val: 282
Ha disminuido 1 puesto en Java (en relación al último mes)
Gráfica de Java

Duda con ejercicio de positionList

Publicado por Sebastian (91 intervenciones) el 03/10/2018 04:28:24
Pues yo lo veo bien, tal vez sea que dentro de los métodos que estas llamando utilices algún objeto que no este inicializado y eso te este generando el NullPointerException
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Duda con ejercicio de positionList

Publicado por Kabuto (1381 intervenciones) el 03/10/2018 23:35:36
Hola.
No he usado nunca la clase PositionList.

Pero pienso que tal vez el problema esté aquí:
if(puntero.element()!=null && puntero.element().equals(nuevaLista.last().element())) {

La primera vez que se ejecuta el for, nuevaLista estará vacío, ¿no?
Y entonces al intentar hacer una comparación con el último elemento de nuevaLista, es imposible porque no tiene elementos, de ahí la excepción NullPointer.

Quizás, antes del for, deberías agregar directamente el primer elemento de la lista recibida por argumentos. Así evitas comenzar el bucle con nuevaLista vacía.

O bien, dentro del bucle, lo primero sería comprobar si nuevaLista esta vacía, en cuyo caso le añades un elemento sin hacer ninguna comparación.

Pero quizás no tenga sentido estar haciendo esa comprobación durante totas las iteraciones del bucle, por eso mejor agregarle un elemento antes de empezar el bucle.

Repito que no conozco esta clase PositionList, así que no se si es este el problema realmente.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar