1

Estoy volviendo a practicar un ejercicio para el examen (de recuperación) de programación y me está saliendo el mismo error que me salió en su día en el examen.

Os dejo el código, a ver si me podéis orientar. Gracias!

CODE


import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader;

public class Principal { public static void main(String[] args) throws IOException { BufferedReader teclado = new BufferedReader(new InputStreamReader(System.in));

    int numeroequipos, numeropartidos, i, respuesta, codigolocal, codigovisitante, gl, gv;
    String nombre;

    System.out.println("¿Cuántos equipos van a jugar?");
    numeroequipos=Integer.parseInt(teclado.readLine());
    Equipo listaequipos [] = new Equipo [numeroequipos];

    for (i = 0; i < listaequipos.length ; i++) {
        System.out.println("Nombre del equipo: ");
        nombre=teclado.readLine();
        listaequipos[i] = new Equipo(nombre);
    }

    System.out.println("¿Cuántos partidos se van a jugar?");
    numeropartidos=Integer.parseInt(teclado.readLine());
    Partido listapartidos[] = new Partido[(numeropartidos*2)-1];


    do {
        System.out.println("1. Jugar partidos mientras que quiera el usuario, verificando que existen los equipos y que" +
                "no han jugado todavía y pidiendo el resultado (verificar que es mayor o igual a 0).\n2. Visualizar todos los partidos jugados.\n3 " +
                ". Visualizar la clasificación (ordena por puntos los equipos y visualiza la clasificación)" +
                "\n4. Salir");
        respuesta=Integer.parseInt(teclado.readLine());
        switch (respuesta){
            case 1:
                // Soy consciente de que faltarían la comprobación de códigos y de si han jugado / terminado el partido
                System.out.println("Codigo del equipo LOCAL: ");
                codigolocal=Integer.parseInt(teclado.readLine());
                System.out.println("Codigo del equipo VISITANTE: ");
                codigovisitante=Integer.parseInt(teclado.readLine());
                for (i = 0; i < listaequipos.length && listaequipos[i].getCodigo()!=codigolocal && listaequipos[i].getCodigo()!=codigovisitante; i++);
                if (i<listaequipos.length) {
                    System.out.println("LOS EQUIPOS EXISTEN Y NO HAN JUGADO AÚN.");
                    System.out.println("GOLES del equipo LOCAL: ");
                    gl = Integer.parseInt(teclado.readLine());
                    System.out.println("GOLES del equipo VISITANTE: ");
                    gv = Integer.parseInt(teclado.readLine());
                    listapartidos[i].jugar(gl,gv); // Creo que me da error de NULLPOINTEREXCEPTION (igual que en el examen) por que aplico la listapartidos[i]
                                                        // como si estuviese usando el 'for' para recorrer listapartidos, pero no acabo de ver otra posibilidad
                }
                    break;

            case 2:
                for (Partido ind:listapartidos) {
                    ind.visualizar();
                }
            case 3: // por hacer
        }
    }while (respuesta!=4);

}

}

  • no es un duplicado.. pero si tiene una muy linda explicación... – gbianchi Apr 26 '17 at 18:14
  • @gbianchi si la pregunta fuera "¿porque listapartidos[i] es null?" no sería un duplicado de la que pongo (aunque estoy seguro de que sería un duplicado de otra). Ahora, como la pregunta es "¿Cómo resolver un NPE?", sí que es un duplicado (o, como mínimo, una pregunta mal formulada). – SJuan76 Apr 26 '17 at 18:20
  • @SJuan76 igual yo hablaba de la respuesta en la pregunta que señalaste.. pero vale tu explicación... – gbianchi Apr 26 '17 at 18:36

1 Answers1

2

aca inicializas el vector...

Partido listapartidos[] = new Partido[(numeropartidos*2)-1];

y donde le estas metiendo los datos como para evitar el null????

te falta en algun lado

listapartidos[i] = NEW Partido();

Definir un vector tipado (de un tipo especifico), no hace que se llene de objetos de ese tipo. Solo define el vector, le asigna el espacio, pero debes crear cada uno de los objetos que contiene a mano.

gbianchi
  • 19,675
  • 11
  • 38
  • 58
  • Muchas gracias, voy a probar... – Guillermo Díaz Hernández Apr 26 '17 at 19:39
  • He probado con algo así, pero me da error... for (i = 0; i < listapartidos.length ; i++) { local=teclado.teclado.readLine(); visitante=local=teclado.teclado.readLine(); listapartidos[i] = new Partido(local, visitante); } – Guillermo Díaz Hernández Apr 26 '17 at 21:29
  • Que error? No podemos ayudar si no sabemos q pasa – gbianchi Apr 26 '17 at 21:36
  • Me da un error de tipos incompatibles REQUIRED: EQUIPO FOUND:JAVA.LANG.STRING Esto es lo que intenté for (i = 0; i < listapartidos.length ; i++) { local=teclado.readLine(); visitante=teclado.readLine(); listapartidos[i] = new Partido(local,visitante); } – Guillermo Díaz Hernández Apr 26 '17 at 21:43
  • Desconozco q tipo de constructor tiene partidos. Si ahora tienes otro problema deberias abrir otra pregunta siendo bien especifico. Ese error se explica solo. Ni siquiera se donde te da. – gbianchi Apr 26 '17 at 21:54