Java - ¡Error en la clase principal!

 
Vista:

¡Error en la clase principal!

Publicado por Caleb (10 intervenciones) el 04/03/2020 15:06:06
Hola! Buenos días... Disculpen pero no he podido resolver este pequeño problema y les quiero pedir el favor si me ayudan con esto, llevo tiempo y no he podido..
Me sale error en la linea 32, es decir, "torneo.addAtleta(uno)"... Muchas gracias!!

Principal (Donde me sale el error)-------------------------------------------
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
package javaapplication11;
 
import java.util.Scanner;
 
 
public class JavaApplication11 {
 
    /**
     * @param args the command line arguments
     */
 
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.println("Numero de competidores" + 2);
        int numComp = 2;
        Competencia torneo = new Competencia();
            for (int i = 0; i < numComp; i++) {
            System.out.println("Nombre del atleta " + (i+1) + ": ");
            String nomb = in.next();
 
            System.out.println("Tiempo del atleta " + (i+1) + ": ");
            int time = in.nextInt();
            Atletas uno = new Atletas(nomb, time);
            torneo.addAtleta(uno);
 
 
        }
        torneo.mostrarTodos();
        torneo.mostrarCampeon();
        torneo.tiempoPromedio();
        System.out.println(torneo.cantidades.entrySet());
    }
}


Class 2 (Es decir, Competencia)--------------------------------------------------------------------------------------------------

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
package javaapplication11;
 
import java.util.ArrayList;
import java.util.HashMap;
import javaapplication11.NewClass.Atletas;
 
 
    public class Competencia{
    protected ArrayList<Atletas> competidores;
    protected HashMap<String,Integer> cantidades;
 
    public Competencia() {
        this.cantidades = new HashMap<>();
        this.competidores = new ArrayList<Atletas>(); //El constructor debe ser inicializado o dará error
 
    }
    /**
     *
     * @param atleta es un objeto de la clase Atletas.
     */
    public void addAtleta(Atletas atleta){
 
        this.competidores.add(atleta); //Añade un nuevo objeto al arreglo
    }
    public void mostrarCampeon(){
        float menorTi = this.competidores.get(0).tiempo; //Por defecto el primer concursante es el campeón a menos que alguien lo haga mejor
        String campeon = this.competidores.get(0).nombre;
 
        for (int i = 0; i < this.competidores.size(); i++){
            if (this.competidores.get(i).tiempo < menorTi){
               menorTi = this.competidores.get(i).tiempo;
               campeon = this.competidores.get(i).nombre;
 
            }
        }
        System.out.println("El menor tiempo fue de " + menorTi);
        System.out.println("Por tanto, el ganador es: " + campeon );
    }
 
    public void mostrarTodos(){
        System.out.println("Los competidores son: ");
        for (int i = 0; i < this.competidores.size(); i++){
        System.out.println ("Atleta N°" + (i+1) +": " + this.competidores.get(i).nombre +  " con un tiempo de: " + this.competidores.get(i).tiempo);
        }
    }
 
    public void tiempoPromedio(){
        float suma = 0; //Inicializamos en 0
        for (int i = 0; i < this.competidores.size(); i++){
            suma = suma + this.competidores.get(i).tiempo;
        }
        float promedio = suma / this.competidores.size(); //La suma de los tiempos dividida entre la cantidad de atletas
        System.out.println("El tiempo promedio de competencia fue: " + promedio);
    }
 
 
 
    public void contarAtletasXPais(String pais){
        if(cantidades.containsKey(pais)){
         cantidades.put(pais, cantidades.get(pais)+1);
    }else{
         cantidades.put(pais, 1);
        }
 
    }
 
 
}



Class 3 de variables de los atletas ------------------------------------------------------------------------------------------------

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package javaapplication11;
 
 
public class Atletas {
 
    private final String nombre;
    private final float tiempo;
 
    public Atletas(String nomb, float time) {
 
    String nombre;
 
    float tiempo;
 
        this.nombre = nomb;
 
        this.tiempo = time;
    }
 
}


Nuevamente agradezco toda ayuda! :)
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de pablo
Val: 841
Bronce
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

¡Error en la clase principal!

Publicado por pablo (212 intervenciones) el 04/03/2020 15:42:46
Hola Caleb

Creo que el error puede estar dirigido a que en tu clase atletas le pasas un float para el tiempo pero después al momento de crear el objeto guardas es un entero eso no está permitido, a menos que hagas un parseo del int a float y después lo guardes.

Revisa eso y cualquier cosa comentas.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

¡Error en la clase principal!

Publicado por Caleb (10 intervenciones) el 04/03/2020 15:48:11
Holaa! No me funciono, ya intente guardar un float... luego cambie el termino a int y tampoco
Lamentablemente, me sigue dando error al comienzo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de pablo
Val: 841
Bronce
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

¡Error en la clase principal!

Publicado por pablo (212 intervenciones) el 04/03/2020 15:54:36
Hola Caleb

Podrías colocar el error que te da? Gracias.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

¡Error en la clase principal!

Publicado por Caleb (10 intervenciones) el 04/03/2020 15:59:59
Mira, coloque literalmente lo que aparece en pantalla para que te sea más fácil guiarte
No he podido encontrar el error

Numero de competidores: 2
Nombre del atleta 1:
Juan
Tiempo del atleta 1:
12
Nombre del atleta 2:
Pedro
Tiempo del atleta 2:
10
Los competidores son:
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
at java.util.ArrayList.rangeCheck(ArrayList.java:657)
at java.util.ArrayList.get(ArrayList.java:433)
at javaapplication11.Competencia.mostrarCampeon(Competencia.java:24)
at javaapplication11.JavaApplication11.main(JavaApplication11.java:36)
BUILD FAILED (total time: 22 seconds)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Rodrigo
Val: 1.379
Plata
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

¡Error en la clase principal!

Publicado por Rodrigo (355 intervenciones) el 04/03/2020 16:13:10
en mostrarCampeon()
agrega un if para considerar el caso cuando el conjuinto de datos es vacio, no hagas get(0) en un conjunto vacio.

Y cuando publiques codigo, se ve mejor cuando usas el icono </> alrededor del codigo

1
2
3
4
5
public static void main() {
     // bla bla
 
     // bla bla
}

Ademas de verse mejor, el codigo aparece con numero de linea y asi se puede ayudar mejor.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de pablo
Val: 841
Bronce
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

¡Error en la clase principal!

Publicado por pablo (212 intervenciones) el 04/03/2020 19:21:34
Hola

De acuerdo con lo que dice Rodrigo

puede evaluar ese if con
1
2
3
if( this.competidores.isEmpty){
  return null;
}

o manejar una exception
1
2
3
4
5
6
try{
  float menorTi = this.competidores.get(0).tiempo;
  String campeon = this.competidores.get(0).nombre;
}catch(IndexOutOfBoundsException e){
  return 0;
}

PD: Disculpa la demora en la respuesta.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Rodrigo
Val: 1.379
Plata
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

¡Error en la clase principal!

Publicado por Rodrigo (355 intervenciones) el 04/03/2020 19:36:31
Creo mejor usar el if, asi es mas facil de leer y entender la intencion,
isEmpty al ser invocada lleva parentesis asi: isEmpty()
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de pablo
Val: 841
Bronce
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

¡Error en la clase principal!

Publicado por pablo (212 intervenciones) el 04/03/2020 19:59:47
Hola Rodrigo, sí disculpa me faltaron los paréntesis , pero bueno ahí dejo las dos opciones y el decide cual quiere implementar, pero claro lógicamente se entiende más el if.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

¡Error en la clase principal!

Publicado por Caleb (10 intervenciones) el 04/03/2020 21:38:49
Muchas gracias a los dos!! Sip mejor implementaré el if
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar