No puedo devolver datos encapsulados en Java [duplicado]

Resuelto Ali Korkmaz asked hace 8 meses • 2 respuestas

Recibo este mensaje de error cuando ejecuto mi programa en java`tu texto Excepción en el hilo "principal" java.lang.NullPointerException: No se puede invocar "Tables.getStatus()" porque "" es nulo en program.tableDraw(program.java: 31) en programa.main(programa.java:14)

public class program{
    public static void main(String[] args){
        Tables[][] gameTable = new Tables[3][3];
        for(Tables[] tables : gameTable){
            for(Tables table : tables){
                table = new Tables();
                System.out.println(table.getStatus());//->i get a return value
            }
        }
        tableDraw(gameTable);
    }
    static void tableDraw(Tables[][] gameTable){
        if(gameTable.length != 3 && gameTable[0].length != 3) {
            System.out.println("game table created wrong");
            System.exit(0);
        }
        for(Tables[] tables : gameTable){
            System.out.println();
            for(Tables table : tables){
                char c = '.';
                Tables.status stat = table.getStatus();//->java.lang.NullPointerException occur          
                if(stat == Tables.status.x) c = 'x';
                else if(stat == Tables.status.o) c = 'o';
                System.out.print(c);
            }
        }
    }
}

Clases y métodos de tablas.

public class Tables {
public enum status{
        blank,
        x,
        o
    }
    private status stat;
    Tables(){
        this.stat = status.blank;
    }
public status getStatus(){
        return this.stat;
    }
}

Busqué en todo Internet una solución y decían que este error ocurre cuando devuelves nulo. Pero ingresé un valor antes de intentar devolverlo.

Ali Korkmaz avatar Feb 16 '24 05:02 Ali Korkmaz
Aceptado

Este código:

    for(Tables table : tables) {
        table = new Tables();
    }

no establecerá las celdas de tables: un bucle for mejorado (for-each) no es adecuado para cambiar la matriz.

La tablesmatriz seguirá estando llena de valores predeterminados, es decir, con null. Más adelante, llamar getStatus()desde nullarroja el NullPointerException.

Deberá asignar a la matriz como entables[i] = new Tables();

Se recomienda (aprender y) usar un depurador; ese problema debería ser relativamente fácil de detectar usando uno.

user85421 avatar Feb 15 '2024 22:02 user85421