Error al ejecutar un código java
Estoy haciendo un programa en java que tiene 5 opciones mostradas por un menú realizado con joptimnessage el cual antes de mostrar ese menú pide el número de atletas los almacena en un arreglo y según la cantidad de atletas que uno ingrese el programa tiene una opción que es la primera de registrar atleta donde se piden datos como nombre, nacionalidad y tiempo, las ventanas para pedir esos datos los muestra el numero de veces segun atletas se hayan dicho que se quieren registrar, despues de eso vuelve a salir el menu con las opciones. Tiene una segunda opción en la cual se desea mostrar el campeón basado en el que menor tiempo se haya gastado todo funciona perfectamente y se ejecuta sin problema. Si se ingresan 3 atletas y el 2do o el 3ro fue el que obtuvo el menor tiempo funciona sin problema y muestra el nombre y tiempo del campeón pero si cuando se están registrando los atletas el tiempo del primer atleta es el menor y luego se le dice al programa que muestre los datos del campeón el programa no avanza del menú y no muestra el resultado.
Realizado con un switch case
Este es el bloque del código de la opción que molesta me gustaria si me podrian ayudar a mirar que es lo que esta mal que impide que funcione bien cuando el ganador es el primer atleta registrado
public class Competencia {
int NumTotalAtletas;
String nombre = null, nacionalidad = null;
double tiempo = 0;
public void menu() {
NumTotalAtletas = Integer.parseInt(JOptionPane.showInputDialog(null,
"Ingrese el número de atletas: "));
Atletas listsAtletas [] = new Atletas[NumTotalAtletas]; //areglo atletas
String opcionMenuPpal;
int opMenuPpal = 0;
do{
opcionMenuPpal = JOptionPane.showInputDialog(null,
"1. Registrar Atleta \n" + "2. Datos del campeón \n" +
"3. Atletas por país \n" + "4. Tiempo promedio de todos los "
+ "atletas \n" + "5. Salir");
if(opcionMenuPpal!=null && !opcionMenuPpal.equals("")) {
opMenuPpal = Integer.parseInt(opcionMenuPpal);
switch(opMenuPpal){
case 1:
for(int i = 0; i<listsAtletas.length;i++){
nombre = JOptionPane.showInputDialog(null,
"Ingrese nombre del atleta");
nacionalidad = JOptionPane.showInputDialog(null,
"Ingrese la nacionalidad del atleta");
tiempo = Double.parseDouble(JOptionPane.
showInputDialog(null,
"Ingrese el tiempo del atleta"));
listsAtletas[i] = new Atletas(nombre,nacionalidad,
tiempo);
JOptionPane.showMessageDialog(null, "Ingresado "
+ " correctamente el atleta No. " + (i + 1) +
" de " + listsAtletas.length);
}
break;
case 2:
Atletas menor = listsAtletas[0];
for(int i = 0; i < listsAtletas.length; i++){
if(listsAtletas[i].getTiempo() < menor.getTiempo())
JOptionPane.showMessageDialog(null,
"El campeón es " +
listsAtletas[i].getNombre() +
" su nacionalidad es " +
listsAtletas[i].getNacionalidad()+
" su tiempo fue " +
listsAtletas[i].getTiempo(), "Atletas",1);
}
break;
No coloco los otros case ya que no creo que influyan en que este molentando el codigo
El metodo getTiempo lo defini asi
public void setTiempo(double tiempo) {
this.tiempo = tiempo;
}
public double getTiempo() {
return tiempo;
}
Cuando se depura paso a paso si el atleta ganador es el 2do que se registro la variable getTiempo de la 2ra linea de código empezando desde case 2 toma valor bien y el código sigue la parte del campeón es y todo eso, pero si el menor es el primero que se ingreso esa variable no muestra que tome ningún valor y no pasa de ese pedazo directo a break