illegal forward reference

Iniciado por juligarc10, 5 Marzo 2019, 13:47 PM

0 Miembros y 1 Visitante están viendo este tema.

juligarc10

Hola amigos, tengo un código con un array que almacena objetos de otra clase. Este array tiene que ser estático para ir asociando cada objeto a su correspondiente posición en el array. Pero cuando declaro que el array es estático me da el error illegal forward reference. No se como solucionarlo. Aquí el código:


package IU;
import core.Jugador;

public class Domino {
   
   
    public static Jugador []njugadores=new Jugador[jugadores];
    private static int jugadores;
   
    public static void inicioPartida() {
        jugadores=ES.pideNumero("¿Cuántas personas jugaran?");

        for(int i=0;i<jugadores;i++){
            String nombre=ES.pideCadena("Introduzca el nombre del jugador");
            Jugador juga=new Jugador(nombre, 0, 0);
            njugadores[i]=juga;
        }
}
   
}


Hay varias clases implementadas, entre ellas, la clase jugador, la cual importo previamente en esta.

ivancea96

Estás creando el array con N elementos, siendo N = jugadores. El problema es que jugadores no tiene valor ene se punto. Lo que tendrías que hacer es que nJugadores no tenga valor (null), y en el método inicioPartida le das valor con new, una evz sepas ya el número de jugadores.
Podrías ahorrarte incluso la variable "jugadores", ya que para saber el numero de jugadores, te llegaría con hacer "nJugadores.length"

spcruzaley

Que tal juligarc10

En efecto, hay que tomar en cuenta los comentarios de ivancea96.

Adicional a ello, veo unos temas:

  • La variable jugadores deberia estar antes de la declaracion de tu arreglo de jugadores.
  • Esta variable, al ser estatica y al no darle valor, toma un valor por defecto de 0
  • Tu arreglo de jugadores tiene una capacidad de cero elementos (Por el punto anterior)

Mi recomendacion es que utilices mejor una lista (ArrayList) para almacenar a tus jugadores, el ArrayList es un arreglo dinamico, lo cual indica que no importa los elementos que vayas a guardar, esta lista "crece bajo demanda" asi no tienes que preocuparte por darle el tamaño especifico.

Sin embargo, puedes hacer lo que comenta ivancea96, hacer el new una vez que tengas el numero de jugadores, aunque con mi ejemplo ya no seria necesario.

Tu codigo podria quedar algo mas o menos asi:

Código (java) [Seleccionar]

public static List<Jugador> njugadores = new ArrayList<>();
   
    public static void inicioPartida() {
        int jugadores = ES.pideNumero("¿Cuántas personas jugaran?");

        for (int i = 0; i < jugadores; i++) {
            String nombre = ES.pideCadena("Introduzca el nombre del jugador");
            njugadores.add(new Jugador(nombre, 0, 0));
        }
    }
   
    //En caso de que quieras iterar la lista de Jugadores para obtener sus valores.
    public static void iterarSobreJugadores(List<Jugador> jugadores) {
        for (Jugador jugador: jugadores) {
            System.out.println(jugador.getNombre());
            System.out.println(jugador.getOtroAtributo());
        }
    }



Saludos.