Pregunta

Está bien.Me siento realmente estúpido por no poder ver esto por mi cuenta, pero estoy estancado.El primer bloque de código es pertinente para el resto del código, donde ocurren los errores.¡Gracias de antemano!:D

Este código determina cuántos monstruos (el tamaño de la matriz) estarán presentes.

    public static byte monsters()
{
    byte b = -7;                                //identifies how many monsters will be found

    chance = (byte)d20.nextInt(30);     //dice roll

    if(chance >= 24)
    {
        b = 4;          //quadruple monsters
    }           
    else if(chance >= 18)
    {
        b = 3;          //triple monsters
    }
    else if(chance >= 12)
    {
        b = 2;          //double monsters
    }
    else if(chance >= 6)
    {
        b = 1;          //single monster
    }
    else
    {
        b = 0;          //no monster
    }
    return b;
}//end monsters()

Este código determina y genera los monstruos que se colocarán en la matriz.La primera parte toma el resultado del código anterior para determinar el tamaño.La segunda parte genera los monstruos.Cuando se lanza la "NullPointerException", este es el código al que apunta, específicamente el "for(x=0;x

public void determineMons()
{
    byte x = 0;                         //counter

    switch(monsters())                  //defines the array
    {
        case 4:
            monsters = new Monster[4];
            break;

        case 3:
            monsters = new Monster[3];
            break;

        case 2:
            monsters = new Monster[2];
            break;

        case 1:
            monsters = new Monster[1];
            break;
    }//end switch

    for(x=0;x<monsters.length;x++)          //populates the array
    {
        chance = (byte)d20.nextInt(20);     //dice roll
        if(chance >= 15)
        {
            monsters[x] = new NazRuel();
        }           
        else if(chance >= 10)
        {
            monsters[x] = new GiantSnake();
        }
        else if(chance >= 5)
        {
            monsters[x] = new Yeti();
        }
        else
        {
            monsters[x] = new Zombie();
        }
    }//end fill For
}//end determineMons()

Aquí está el código "ArrayOutOfBoundsExceptions".Sin embargo, el error rebota entre los diferentes casos, aunque cada vez la línea de error es la línea "monster =".

        determineMons();
    switch(Cell.monsters())
    {
        case 4:
            monster = "There is a " + monsters[0] + ", a " + monsters[1] + ", a " + monsters[2] + ", and a " + monsters[3] + " in this area!";
            break;

        case 3:
            monster = "There is a " + monsters[0] + ", a " + monsters[1] + ", and a " + monsters[2] + " in this area!";
            break;

        case 2:
            monster = "There is a " + monsters[0] + ", and a " + monsters[1] + " in this area!";
            break;

        case 1:
            monster = "There is a " + monsters[0] + " in this area!";
            break;
    }//end Monster block
¿Fue útil?

Solución

La excepción de puntero nulo

Si monsters() devuelve 0, la variable monstruos no es inicializada por el interruptor (no hay case 0 ni default) y generará un NullPointerException Cuando tu lo hagas monsters.length en el bucle for.

Además, deberías cambiar tu interruptor:

switch(monsters())                  //defines the array
{
    case 4:
        monsters = new Monster[4];
        break;

    case 3:
        monsters = new Monster[3];
        break;

    case 2:
        monsters = new Monster[2];
        break;

    case 1:
        monsters = new Monster[1];
        break;
}

a:

int b = monsters();
if (b > 0) {
    monsters = new Monsters[b];
}

No es un error, pero eso aclararía el código.

La excepción fuera de límites

Llama monsters() dos veces.En otras palabras, creas la matriz. monsters con la primera llamada a monsters() y lees el contenido de monsters usando otra llamada a monsters() para determinar la cantidad de elementos.

Por ejemplo, digamos que en la primera llamada a monsters(), el valor devuelto es 3.En este momento, creas una matriz de 3 elementos.Y cuando quieras imprimir el contenido de monsters, monsters() devoluciones 4.Como consecuencia, cometerá un error fuera de límite al intentar leer el cuarto elemento.

Como recordatorio, el valor devuelto por monsters() es aleatorio:

chance = (byte)d20.nextInt(30);     //dice roll

Para solucionar este problema, intente cambiar:

switch(Cell.monsters())

a

switch(monsters.length)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top