Problema con un arreglo al devolver 5 valores maximos de un ramdom

Iniciado por wnavashn, 14 Septiembre 2013, 22:18 PM

0 Miembros y 1 Visitante están viendo este tema.

wnavashn

Me gustaría me ayudaran con este código ya que no veo como resolver el problema planteado acá.

CitarEjercicio 3
Elaborar un método que imprima los cinco elementos más grandes de un
arreglo de n enteros

Yo tengo este codigo que hasta ahorita me duelve 2 valores pero no encuentro como hacer para que me devuelva 5 valores distintos y ordenados de mayor a menor.

Código (java) [Seleccionar]

/*
* Ejericio 3
*/
package s9_ejercicio3;

/**
*
* @author USUARIO
*/

import java.util.Scanner;

public class S9_Ejercicio3 {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
    Scanner teclado=new Scanner(System.in);
    int longitud=0, v1=0, v2=0, v3=0, v4=0, v5=0;
    int arreglo[] = new int [longitud];
   
     System.out.print("Longitud del arreglo: ");
     longitud = teclado.nextInt();
     arreglo = new int [longitud];
     
      for (int i=0; i<arreglo.length; i++)
       {
          arreglo[i] = 1 + (int)(Math.random()*100);
         }// fin de for
        Sort(arreglo);
        System.out.println("");
       for (int i=0; i<arreglo.length; i++)
       {
             
           //if (v1!=arreglo[i])
           if (arreglo[i] > v1)
           {
               v1=arreglo[i];
               
           }
           if (arreglo[i] < v1)
               {
                   
                   v2=arreglo[i];
               }
            if (arreglo[i]<v1)
            {
                v3=arreglo[i];
            }
           
           // if (v2<v1)
           /*{   
                   v2=arreglo[i];
           }               
           */
       
           
           System.out.println("Los valores mas altos son: "+v1+" "+v2+" "+v3+" "+v4+" "+v5);
   
       
       }// fin de for
       
     
    }//fin de main
   
     public static void Sort(int [] num)
    {
        int j;
        boolean flag = true;
        int temp;
       
        while (flag)
        {
         flag = false;
         for (j=0; j<num.length -1; j++)
         {
             if (num [j] < num[j+1])
             {
                 temp = num[j];
                 num[j] = num[j+1];
                 num[j+1] = temp;
                 flag = true;
             }
         }
        }
       
    }//fin de sort
}


Esto es lo que me devuelve al ejecutarlo

CitarLongitud del arreglo: 5

Los valores mas altos son: 96 0 0 0 0
Los valores mas altos son: 96 91 91 0 0
Los valores mas altos son: 96 68 68 0 0
Los valores mas altos son: 96 48 48 0 0
Los valores mas altos son: 96 7 7 0 0
BUILD SUCCESSFUL (total time: 3 seconds)

Gracias por la AYUDA!!!

Zoik

#1
Acabarias antes ordenando la array con el método de la burbuja y cogiendo los 5 últimos, busca información sobre el tema.

Puedes empezar por aqui:

http://puntocomnoesunlenguaje.blogspot.com.es/2012/07/metodo-de-ordenacion-burbuja.html

Un saludo.

Zoik

Prueba con esto dentro de tu for en la línea 33.

Código (java) [Seleccionar]

                        if(arreglo[i] > v1){
v1 = arreglo[i];
} else if(arreglo[i] > v2) {
v2 = arreglo[i];
} else if(arreglo[i] > v3){
v3 = arreglo[i];
} else if(arreglo[i] > v4){
v4 = arreglo[i];
} else if(arreglo[i] > v5){
v5 = arreglo[i];
}


Un saludo

~ Yoya ~

Haz una función que devuelva el numero mas alto de un arreglo.

Luego que hayas creado la función, utilizas un for que se repita 5 veces y en cada repetición guardas el numero mas alto y lo borras del array, de forma que en el próximo ciclo del for no aparezca ese numero sino el que le sigue mas alto.

Saludos.
Mi madre me dijo que estoy destinado a ser pobre toda la vida.
Engineering is the art of balancing the benefits and drawbacks of any approach.

Mitsu

#4
Hola. No necesitas ordenar el array por el método de la burbuja, para eso tienes en la API el método sort que ordena un vector de mayor a menor. Una vez ordenados, con un simple for, guardas los 5 primeros (mayores) números del array ya ordenado.

Código (=java) [Seleccionar]

private void setLongitud(){
Scanner into = new Scanner(System.in);
System.out.println("Ingrese el numero de valores que desea:");
longitud = into.nextInt();
}

private void setArray(){
Random generadorAleatorio = new Random();
for(int i=0; i<array.length; i++){
array[i] = 1 + generadorAleatorio.nextInt(100);
}
}

private int[] getMayores(int[] arreglo){
int[] numeros = new Int[5];
// llamamos al metodo sort para ordenar el array
Arrays.sort(arreglo);
for(i=0; i<5; i++){
numeros[i] = arreglo[i];
}
return numeros;
}





Saludos.

1mpuls0

Se supone que este tipo de ejercicios es para desarrollar la lógica, así que no creo que un método de ordenación nativo del lenguaje o creado sea recomendado (aunque claro está el usuario  no indica un método para solucionarlo).

Me voy más como lo propone  ~ Yoya ~

Saludos.
abc

Mitsu

Cita de: Darhius en 23 Septiembre 2013, 20:39 PM
Se supone que este tipo de ejercicios es para desarrollar la lógica.

Tienes razón.

@wnavashn: Aquí el lenguaje es irrelevante. Se debe analizar el problema y hacer el algoritmo primero, no analizar y codificar al mismo tiempo (déjate eso para cuando tengas bastante experiencia).

Tienes que ir por etapas. Analiza -> Realiza tu algoritmo -> Pásalo  a un lenguaje de programación.


kurupi13

#7
una vez me toco hacer lo mismo, obtener los cinco mayores numeros de un arreglo, en realidad todavia tengo el codigo que escribi pero no te voy a dar para que puedas pensar un poco.

Te voy a dar una pista de como hize, es un poco complicado pero funciona usando logica matematica.

Buscar el mayor de todos es facil, simplemente recorriendo el arreglo y preguntando si es mayor, etc. Podes hacer un metodo de eso que vamos a usar mas tarde, podria llamarse por ejemplo calcularMaximo(tu arreglo) y que al final retorne un int.

Ahora si se viene lo complicado, que seria calcular el resto de los numeros mayores sin incluir a los anteriores, yo hize de la siguiente manera:

Podrias usar un poco de logica y darte cuenta que el mayor de todos menos el segundo mayor produciria el menor resto de todos. Esa es la clave del algoritmo, ahora esta en tus manos si queres probar o no, ya te di la solucion, ahora te faltaria ver como restar el segundo con el tercero y asi sucesivamente hasta hallar los cinco mayores y podrias ir cargando los numeros en un nuevo arreglo para imprimir mas tarde.

A mi me llevo 25 lineas con algunas de comentarios, asi que no es muy largo pero un poco dificil de encarar el problema de esta forma, pero efectivo.