0

Tengo este código, pero me sale NullPointerException en el método que inicializa el arreglo con 0:
/** * This class holds the methods to initialize the arrays. */

import java.lang.*;

public class Arrays {

private int fil=1;
private int colum=1;
private int[][] array;
private int i,j;

//Se fija el tamaño del arreglo
public Arrays (int fila, int columna){
// Se define el tamaño de las variables que regularán el tamaño del arreglo 
    fil= fila;
    colum=columna;
}

Método que inicializa array

public void arrayLength(){
    int[][] array = new int[fil][colum]; 
}

Método que incializa

public void setArray (){
//Se intenta inicializar todo el arreglo con 0
    for (i=0; i<fil; i++){
        for (j=0; j<colum; j++) {
            array[i][j]=0; //Marca ERROR aquí
        }
    }

}

Método que regresa el arreglo

public int[][] getArray (){
    return array;
}

Main

public static void main(String[] args) throws NullPointerException{
    int[][] arrayNEW;
    Arrays newArg = new Arrays (8,9); 
    newArg.arrayLength();
    newArg.setArray();//Marca ERROR aquí
    arrayNEW = newArg.getArray();
    // Se imprime el contenido del arreglo que debería ser 0

    for (int i=0; i<arrayNEW.length; i++){
        for (int j=0; j<arrayNEW[i].length ; j++) {
            System.out.print(arrayNEW[i][j]);
        }
    }

}

//Error de consola

// Sí COMPILA, pero NO corre. Lo que me sale al correrlo es:

Exception in thread "main" java.lang.NullPointerException

//Estas dos líneas fueron marcadas con "marca ERROR aquí"

    at Arrays.setArray(Arrays.java:29)

    at Arrays.main(Arrays.java:43)
Viviana
  • 3
  • 1
  • Bienvenida @Viviana a Stack Overflow en español, te sugiero que hagas el [recorrido](https://es.stackoverflow.com/tour) y de paso ganes tu primera medalla, también es muy importante que leas [Cómo preguntar](https://es.stackoverflow.com/help/how-to-ask) y [Cómo crear un ejemplo mínimo, completo y verificable](https://es.stackoverflow.com/help/mcve) para poder mejorar tus preguntas y que sean bien recibidas por la comunidad, favoreciendo tus chances de obtener buenas respuestas. – HubertRonald Apr 19 '19 at 16:39

2 Answers2

0

El código compila,pero tu código debería tener cláusulas try-catch para atrapar las excepciones en tiempo de ejecución.Tu código tiene varios errores, pero el más importante se encuentra en int[][]array:

public class Arreglo {
    //...
    //El array debería tener un tamaño definido
    private int[][] array;
   //...
}

Antes de trabajar con arreglos, debes definir su tamaño. Algunos ejemplos de arreglos bien definidos:

int[] numeros = {1,2,3,4,5};
int[] vector = new int[10];
int[] matriz[] = new int[4][3];

Estos no podrán compilar:

int numeros = new int[];
//Este tiene el tipo y nombre de referencia, pero no tiene un tamaño de fila y columna. A la hora de querer usarlo nos causará un error en la ejecución.
int arreglo[][];

Espero te sirva esta explicación.

Fernando Carraro
  • 1,247
  • 9
  • 14
0

El problema esta en el método "arrayLength()", ya que en ese método declaras e inicializas una variable local con nombre "array". Por lo tanto, el atributo con mismo nombre no esta inicializado y es por eso que cuando recorres el array para imprimir los valores te aparece el mensaje de NullPointerException. Para arreglarlo simplemente sustituye la parte de int[][] por "this". El metodo arrayLength() quedaría de la siguiente manera:

public void arrayLength(){
    this.array = new int[fil][colum];
}

Un saludo.