0

Buenas ayer hice un examen de programación y mañana tengo el trimestral y no veo al profesor para que me pueda explicar. Tengo una clase partida jugadores con una serie de atributos y un array y el método ordenar jugador, mejor jugador, peor jugador y media de puntuacion dan null pointe exception y no entiendo porque. OS pongo el código y muchas gracias

public class PartidaJugadores {

private DatosJugador[] jugadores;
private static int MAXELEMENTOS = 20;
private int numElementos;

public PartidaJugadores(DatosJugador[] jugadores, int numElementos) {
    this.jugadores = jugadores;
    this.numElementos = numElementos;
}

public PartidaJugadores() {
    this.jugadores = new DatosJugador[MAXELEMENTOS];
    this.numElementos = 0;
}

public DatosJugador[] getJugadores() {
    return jugadores;
}

public void setJugadores(DatosJugador[] jugadores) {
    this.jugadores = jugadores;
}

public static int getMAXELEMENTOS() {
    return MAXELEMENTOS;
}

public static void setMAXELEMENTOS(int MAXELEMENTOS) {
    PartidaJugadores.MAXELEMENTOS = MAXELEMENTOS;
}

public int getNumElementos() {
    return numElementos;
}

public void setNumElementos(int numElementos) {
    this.numElementos = numElementos;
}

@Override
public String toString() {
    String aux = "PartidaJugadores{" + "jugadores=" + jugadores + ", numElementos=" + numElementos + '}';
    for (int i = 0; i < this.getNumElementos(); i++) {
        aux += jugadores[i].toString();
    }
    return aux;
}

public void ordenarJugadores() {
    for (int x = 0; x < jugadores.length; x++) {
        for (int i = 0; i < jugadores.length - x - 1; i++) {
            DatosJugador aux = null;
            if (jugadores[i].getPuntuacion() < jugadores[i + 1].getPuntuacion()) {
                aux = jugadores[i + 1];
            }
            jugadores[i + 1] = jugadores[i];
            jugadores[i] = aux;
        }
    }
}

public void desorDenarJugadores() {
    Random r = new Random();
    int numCambios = 10 + r.nextInt(50);

    for (int i = 0; i < numCambios; i++) {
        int primera = r.nextInt(numElementos);
        int segunda = r.nextInt(numElementos);
        DatosJugador c = this.jugadores[primera];
        this.jugadores[primera] = this.jugadores[segunda];
        this.jugadores[segunda] = c;
    }
}

public void jugarPartida() {

}

public int mejorJugador() {
    int mayor = Integer.MIN_VALUE;
    int pos = -1;
    for (int i = 0; i < this.getNumElementos(); i++) {
        if (jugadores[i].getPuntuacion() > mayor) {
            mayor = jugadores[i].getPuntuacion();
        }
        pos = i;
    }
    return pos;
}

public int peorJugador() {
    int menor = Integer.MAX_VALUE;
    int pos = -1;
    for (int i = 0; i < this.getNumElementos(); i++) {
        if (jugadores[i].getPuntuacion() > menor) {
            menor = jugadores[i].getPuntuacion();
        }
        pos = i;
    }
    return pos;
}

public double mediaAciertos() {
    double acumulado = 0;
    double resultado = 0;
    for (int i = 0; i < this.getNumElementos(); i++) {
        acumulado += jugadores[i].getPuntuacion();
    }
    resultado = acumulado / this.getNumElementos();
    return resultado;
}
 public boolean addJugador(DatosJugador jugador1) {
    boolean resultado = false;
    if (this.getNumElementos() < jugadores.length) {
        jugadores[this.getNumElementos() + 1] = jugador1;
        this.numElementos++;
        resultado = true;
    } else {
        resultado = false;
    }
    return resultado;
}

}

unknow
  • 1,896
  • 9
  • 35
  • Te dan null todos los métodos o uno en particular? – zerocool Mar 12 '19 at 17:48
  • ¿De donde sale el array DatosJugador? Imagino que lo tendrás en otra clase, que es lo que añades en ella? – D. Albarracín Mar 12 '19 at 17:52
  • Bienvenido a Stackoverflow. Aquí no aparece el **contexto** en el que usas la clase en el cual supongo que te está dando el NPE. Sin esa información va a ser difícil ayudarte. Debes mostrar cómo creas la instancia de la clase, cómo la informas (le agregas datos) y cómo llamas a los métodos que dices que están dando error. Lee también los mensajes específicos de error, porque siempre dan indicaciones precisas sobre los mismos. Lo que pasa es que Java es demasiado *hablador* en sus mensajes de error, pero tú siempre busca cerca de donde dice *`Caused by`* en esos largos mensajes de error. – A. Cedano Mar 12 '19 at 18:14

1 Answers1

1

Prueba a ponerle && jugadores[i] != null en los for que realizas, puede ser que tengas en el array algun objeto en null que es lo mas probable

public void ordenarJugadores() {
    for (int x = 0; x < jugadores.length && jugadores[i] != null; x++) {
        for (int i = 0; i < jugadores.length - x - 1 && jugadores[i] != null; i++) {
            DatosJugador aux = null;
            if (jugadores[i].getPuntuacion() < jugadores[i + 1].getPuntuacion()) {
                aux = jugadores[i + 1];
            }
            jugadores[i + 1] = jugadores[i];
            jugadores[i] = aux;
        }
    }
}

public int mejorJugador() {
    int mayor = Integer.MIN_VALUE;
    int pos = -1;
    for (int i = 0; i < this.getNumElementos() && jugadores[i] != null; i++) {
        if (jugadores[i].getPuntuacion() > mayor) {
            mayor = jugadores[i].getPuntuacion();
        }
        pos = i;
    }
    return pos;
}

public int peorJugador() {
    int menor = Integer.MAX_VALUE;
    int pos = -1;
    for (int i = 0; i < this.getNumElementos() && jugadores[i] != null; i++) {
        if (jugadores[i].getPuntuacion() > menor) {
            menor = jugadores[i].getPuntuacion();
        }
        pos = i;
    }
    return pos;
}

public double mediaAciertos() {
    double acumulado = 0;
    double resultado = 0;
    for (int i = 0; i < this.getNumElementos() && jugadores[i] != null; i++) {
        acumulado += jugadores[i].getPuntuacion();
    }
    resultado = acumulado / this.getNumElementos();
    return resultado;
}

Marca como respuesta correcta si te es de utilidad y suerte con tu examen!