Java - Tres mejores tiempos

 
Vista:
Imágen de perfil de Devastador
Val: 47
Ha aumentado su posición en 2 puestos en Java (en relación al último mes)
Gráfica de Java

Tres mejores tiempos

Publicado por Devastador (15 intervenciones) el 30/10/2020 23:10:32
Hola, tengo una duda, tengo que hacer un botón en java que me imprima los 3 mejores tiempos ingresado en un arreglo, el problema es que el arreglo no tiene limite y por eso se debe comparar según el tamaño del arreglo y es allí donde no se que hacer.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
private void winnermActionPerformed(java.awt.event.ActionEvent evt) {
        for (int i=0; i < array.length; i++){
                if (array[i].getTiempocarrera() > 0){
                    if (array[i].getSexo().equals("Femenino")){
                    modelo.insertRow(contador3,new Object[]{});
                    modelo.setValueAt(array[i].getNumcorredor(),contador3, 0);
                    modelo.setValueAt(array[i].getNombre(), contador3, 1);
                    modelo.setValueAt(array[i].getApellido(), contador3, 2);
                    modelo.setValueAt(array[i].getTiempocarrera(), contador3, 3);
                    modelo.setValueAt(array[i].getFacultad(), contador3, 4);
 
                }
            }
                else {
                    JOptionPane.showMessageDialog(rootPane, "No se ha ingresado ningún tiempo","Alerta",JOptionPane.WARNING_MESSAGE);
                }
        }
    }
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 Rodrigo
Val: 2.041
Plata
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Tres mejores tiempos

Publicado por Rodrigo (623 intervenciones) el 31/10/2020 16:30:59
Podrias tener un arreglo de 3 enteros. Un heap de tamano 3.
En ese entero guardas los indices de los 3 mayores.
Inicialmente guardas -1 alli, y los reemplazaras a medida que visitas el arreglo de resultados.

Imagina que tu array son 100 mediciones y que ya llevas algunas vueltas en. la iteracion y los 3 mayores hasta ahora son
[ 7, 4, 11 ]

o sea el elemento que esta en el indice 7 es mayor que todos hasta ahora, luego le sigue el que esta en el 4 y luego el que esta en el 11.
Te toca revisar el indice 20 (por ejemplo, aunque esto lo tienes que hacer con todos los indices, uno por uno)

Hay 2 casos "sencillos":

- 1) El valor que esta en la posicion 20 es menor que el valor en la posicion 11. En ese caso, el valor de la posicion 20 se descarta, por ser menor que los 3 mayores.
- 2) El valor que esta en la posicion 20 es mayor que el valor en la posicion 7. Es ese caso, tienes que "mover" todos los datos y te quedarias con este arreglo: [ 20, 7, 4 ]
y el de la posicion 11 ya no es parte de los 3 mayores.
- Ahora hay compararlo contra el de la posicion 4. SI es mayor que ese, te quedas con: [7, 20, 4]. Sino te quedas con [ 7, 4, 20 ] (No es necesario comparar otra vez contra 11, pues fue lo primero que se hizo en esta secuencia y sabamos que si llegamos hasta aqui, el valor tendria que ser mayor que el valor en la posicion 11)

Creo que esta logica se puede simplificar un poco al parecer, pero bueno, eso queda propuesto para ti.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar