elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Problema con un arreglo al devolver 5 valores maximos de un ramdom
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problema con un arreglo al devolver 5 valores maximos de un ramdom  (Leído 7,976 veces)
wnavashn

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Problema con un arreglo al devolver 5 valores maximos de un ramdom
« en: 14 Septiembre 2013, 22:18 pm »

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

Citar
Ejercicio 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
  1. /*
  2.  * Ejericio 3
  3.  */
  4. package s9_ejercicio3;
  5.  
  6. /**
  7.  *
  8.  * @author USUARIO
  9.  */
  10.  
  11. import java.util.Scanner;
  12.  
  13. public class S9_Ejercicio3 {
  14.  
  15.    /**
  16.      * @param args the command line arguments
  17.      */
  18.    public static void main(String[] args) {
  19.    Scanner teclado=new Scanner(System.in);
  20.    int longitud=0, v1=0, v2=0, v3=0, v4=0, v5=0;
  21.    int arreglo[] = new int [longitud];
  22.  
  23.     System.out.print("Longitud del arreglo: ");
  24.     longitud = teclado.nextInt();
  25.     arreglo = new int [longitud];
  26.  
  27.      for (int i=0; i<arreglo.length; i++)
  28.       {
  29.          arreglo[i] = 1 + (int)(Math.random()*100);
  30.         }// fin de for
  31.        Sort(arreglo);
  32.        System.out.println("");
  33.       for (int i=0; i<arreglo.length; i++)
  34.       {
  35.  
  36.           //if (v1!=arreglo[i])
  37.           if (arreglo[i] > v1)
  38.           {
  39.               v1=arreglo[i];
  40.  
  41.           }
  42.           if (arreglo[i] < v1)
  43.               {
  44.  
  45.                   v2=arreglo[i];
  46.               }
  47.            if (arreglo[i]<v1)
  48.            {
  49.                v3=arreglo[i];
  50.            }
  51.  
  52.           // if (v2<v1)
  53.           /*{  
  54.                    v2=arreglo[i];
  55.            }              
  56.            */
  57.  
  58.  
  59.           System.out.println("Los valores mas altos son: "+v1+" "+v2+" "+v3+" "+v4+" "+v5);
  60.  
  61.  
  62.       }// fin de for
  63.  
  64.  
  65.    }//fin de main
  66.  
  67.     public static void Sort(int [] num)
  68.    {
  69.        int j;
  70.        boolean flag = true;
  71.        int temp;
  72.  
  73.        while (flag)
  74.        {
  75.         flag = false;
  76.         for (j=0; j<num.length -1; j++)
  77.         {
  78.             if (num [j] < num[j+1])
  79.             {
  80.                 temp = num[j];
  81.                 num[j] = num[j+1];
  82.                 num[j+1] = temp;
  83.                 flag = true;
  84.             }
  85.         }
  86.        }
  87.  
  88.    }//fin de sort
  89. }

Esto es lo que me devuelve al ejecutarlo

Citar
Longitud 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!!!


En línea

Zoik

Desconectado Desconectado

Mensajes: 91


Ver Perfil
Re: Problema con un arreglo al devolver 5 valores maximos de un ramdom
« Respuesta #1 en: 14 Septiembre 2013, 23:45 pm »

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.


« Última modificación: 15 Septiembre 2013, 00:07 am por Zoik » En línea

Zoik

Desconectado Desconectado

Mensajes: 91


Ver Perfil
Re: Problema con un arreglo al devolver 5 valores maximos de un ramdom
« Respuesta #2 en: 15 Septiembre 2013, 14:43 pm »

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

Código
  1.                        if(arreglo[i] > v1){
  2. v1 = arreglo[i];
  3. } else if(arreglo[i] > v2) {
  4. v2 = arreglo[i];
  5. } else if(arreglo[i] > v3){
  6. v3 = arreglo[i];
  7. } else if(arreglo[i] > v4){
  8. v4 = arreglo[i];
  9. } else if(arreglo[i] > v5){
  10. v5 = arreglo[i];
  11. }

Un saludo
En línea

~ Yoya ~
Wiki

Desconectado Desconectado

Mensajes: 1.125



Ver Perfil
Re: Problema con un arreglo al devolver 5 valores maximos de un ramdom
« Respuesta #3 en: 16 Septiembre 2013, 01:12 am »

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.
En línea

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

Desconectado Desconectado

Mensajes: 259



Ver Perfil WWW
Re: Problema con un arreglo al devolver 5 valores maximos de un ramdom
« Respuesta #4 en: 16 Septiembre 2013, 05:46 am »

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
  1. private void setLongitud(){
  2. Scanner into = new Scanner(System.in);
  3. System.out.println("Ingrese el numero de valores que desea:");
  4. longitud = into.nextInt();
  5. }
  6.  
  7. private void setArray(){
  8. Random generadorAleatorio = new Random();
  9. for(int i=0; i<array.length; i++){
  10. array[i] = 1 + generadorAleatorio.nextInt(100);
  11. }
  12. }
  13.  
  14. private int[] getMayores(int[] arreglo){
  15. int[] numeros = new Int[5];
  16. // llamamos al metodo sort para ordenar el array
  17. Arrays.sort(arreglo);
  18. for(i=0; i<5; i++){
  19. numeros[i] = arreglo[i];
  20. }
  21. return numeros;
  22. }
  23.  




Saludos.
« Última modificación: 16 Septiembre 2013, 05:49 am por Mιτѕυ » En línea

1mpuls0


Desconectado Desconectado

Mensajes: 1.186


Ver Perfil
Re: Problema con un arreglo al devolver 5 valores maximos de un ramdom
« Respuesta #5 en: 23 Septiembre 2013, 20:39 pm »

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.
En línea

abc
Mitsu

Desconectado Desconectado

Mensajes: 259



Ver Perfil WWW
Re: Problema con un arreglo al devolver 5 valores maximos de un ramdom
« Respuesta #6 en: 23 Septiembre 2013, 23:08 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.

En línea

kurupi13

Desconectado Desconectado

Mensajes: 7


Ver Perfil
Re: Problema con un arreglo al devolver 5 valores maximos de un ramdom
« Respuesta #7 en: 1 Octubre 2013, 23:34 pm »

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.

« Última modificación: 1 Octubre 2013, 23:39 pm por kurupi13 » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema al devolver objeto
Programación C/C++
shulneos 2 1,765 Último mensaje 28 Noviembre 2014, 21:13 pm
por shulneos
Valores repetidos en un arreglo en C
Programación C/C++
RGT 3 3,854 Último mensaje 31 Marzo 2015, 04:10 am
por engel lex
Devolver un arreglo o vector desde una funcion.
Programación C/C++
MartNahuel95 2 3,743 Último mensaje 10 Junio 2016, 04:09 am
por engel lex
problema al devolver un throw UnexpectedValueException con codigo 401
PHP
Razzari 2 2,917 Último mensaje 29 Agosto 2017, 01:29 am
por Razzari
Validacion de Valores dentro de un arreglo estableciendo un limite
Programación C/C++
i7Savage 1 1,610 Último mensaje 10 Julio 2019, 21:11 pm
por K-YreX
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines