sacar repetir rango pedir numeros numero matriz generar entre entero dentro con como asignar aleatorios aleatorio adivinar java linked-list

java - repetir - Agregar números a un rango



numero entero aleatorio en java (1)

Estoy haciendo un programa donde puedo agregar una secuencia entera a un rango. Tengo problemas para agregar estos valores al Rango. Debería ejecutar el método addNodeAfter , pero no hace nada.

Luego, cuando quiero mostrar el Rango, obtengo una NullPointerException esta línea:

for (int i = 1; i <= manyNodes; i++){

¿Algun consejo?

Principal:

public class PDEMain { /** * @param args the command line arguments */ public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.print("Enter a start number: "); Integer startNum = input.nextInt(); System.out.print("Enter end number: "); Integer endNum = input.nextInt(); System.out.print("Enter increment: "); Integer increment = input.nextInt(); Range obj = new Range(startNum, endNum, increment); System.out.println(obj); obj.display(); } }

Distancia:

public class Range implements Cloneable { private Integer data; // holds the data private Range link; //holds the link Range head; //refers to head of linked list private Integer manyNodes; private Integer startValue; private Integer endValue; private Scanner input; public Range(Integer data, Range link){ this.data = data; this.link = link; } public Range(Integer data, Range link, Range head) { this.data = data; this.link = link; this.head = head; manyNodes++; } public Range(Integer start, Integer end,Integer increment){ if(start == null){ startValue = 0; } if(increment == null){ if(start < end){ increment++; }else{ increment--; } } for (int i = start; i <= end; i+= increment){ addNodeAfter(i); System.out.println(i); } } public Integer getData() { return data; } public void setData(Integer data) { this.data = data; } public Range getLink() { return link; } public void setLink(Range link) { this.link = link; } public Range getHead() { return head; } public void setHead(Range head) { this.head = head; } public void addNodeAfter(Integer element){ this.link = new Range(element, this.link); } public void display(){ Range cursor = head; for (int i = 1; i <= manyNodes; i++){ // NPE on this line System.out.print(cursor.getData() + " "); cursor = cursor.getLink(); } System.out.println(""); } }


Ha definido manyNodes como un Integer , no como un int . Esto significa que su valor predeterminado es null , no 0 , y nunca establece el valor en ningún lugar de su código.

Cuando intente utilizar el bucle como la variable de control en su método display() , la JVM lanzará un NPE cuando intente desempaquetar el null .

Una solución rápida sería cambiar el tipo a int :

private int manyNodes;

Esto resolverá el NPE inmediato, pero aún no mostrará nada, ya que en realidad nunca incrementa manyNodes en el constructor al que está llamando. Esto significa que el for-loop en su método de display() se cae y nunca imprime ninguno de los datos.

Recomendaría deshacerse por completo de head y manyNodes , y volver a escribir su método display() largo de las líneas de:

public void display() { Range cursor = getLink(); while (cursor != null) { System.out.print(cursor.getData() + " "); cursor = cursor.getLink(); } System.out.println(""); }

Tenga en cuenta que esto generará los datos "hacia atrás" debido a la forma en que agrega cosas en este constructor:

public static void main(String[] args) throws Exception { Range obj = new Range(1, 10, 1); obj.display(); // prints 10 9 8 7 6 5 4 3 2 1 }

Es posible que desee echar un vistazo a una implementación de lista enlazada existente para tener una mejor idea de cómo se escriben normalmente.