Botón para abrir el Menú Botón para cerrar el Menú
Logo da empresa Alura
Iniciar Sesión Nuestros Planes
Formaciones Conoce a Luri
  • Programación _
  • Front End _
  • Data Science _
  • DevOps _
  • Innovación y Gestión _
Artículos de Tecnología > Programación

Ordenar números en Java

Alex Felipe
Alex Felipe
16/11/2023

Compartir

Mira este artículo:
  1. Ordenar números en Java

Ordenar números en Java

img1 Fragmento de código en java - portada.png

Estos días, ¡el bote de Mega-Sena alcanzó los € 2,52 billones! Sin embargo, siempre estoy muy indeciso sobre qué juego jugar, así que voy a pedirle a mi sistema que juegue por mí. Vamos a crear nuestro array int de 5 posiciones para almacenar los números:

int[] numeros = new int[5];

Ahora escaneamos nuestro array y rellenamos cada posición con un valor aleatorio entre 1 y 50, utilizando la clase Random y su método nextInt():

for (int i = 0; i < numeros.length; i++) { 
    numeros[i] = new Random().nextInt(50);
}

Imprimiendo nuestro array con el método toString() de la clase Arrays:

System.out.println(Arrays.toString(numeros));
Resultado:
[2, 12, 23, 0, 10]

¡Generó 5 números aleatorios! Pero un momento... ¿uno de esos números es el 0? Mega-Sena sólo dibuja números entre 1 y 50... El método nextInt() con parámetro 50 significa que se devolverá un valor de tipo int entre 0 y 49. Para resolver este problema, necesitamos sumar 1 cuando generemos los números aleatorios:

for (int i = 0; i < numeros.length; i++) {
     numeros[i] = new Random().nextInt(50) + 1; }
Resultado:
[33, 32, 50, 1, 40, 24]

¡Genial! ¡El sistema ha generado un juego Mega-Sena! Y, como podemos ver, esta vez ha aparecido el número 50.

Pero aún hay un problema: estos números están desordenados... Imagínate rellenar la rueda de la Mega-Sena: marco el 43, luego el 32 ¡y luego tengo que pasar al número 50! ¿Y cuando salgan los resultados? ¿Tendré que buscar a mano? ¡Qué horror! El método estático sort() de la clase Arrays nos ayuda a ordenar los vectores numéricos:

Arrays.sort(numeros); 
System.out.println(Arrays.toString(numeros));
Resultado:
[13, 21, 27, 38, 41, 45]

¡Excelente! ¡Hemos conseguido generar nuestro juego Mega-Sena! Pero ahora, en lugar de usar un array, quiero usar una solución más sofisticada. Un List, por ejemplo:

List numeros = new ArrayList();

Ahora, vamos a rellenar nuestro List con un while:

while (numeros.size() < 5) { 
    int numero = new Random().nextInt(50) + 1; 
    numeros.add(numero); 
}

¿Y para ordenar? ¿Uso el método sort() de la clase Arrays? Desafortunadamente el método sort() de la clase Arrays sólo espera arrays como parámetros y un List es una Collection... Sin embargo, existe un método estático sort() para Collection utilizando la clase Collections:

Collections.sort(numeros);
System.out.println(numeros);
Resultado:
[9, 12, 16, 39, 39, 46]

Generó el juego como se esperaba. Pero un momento... ¿39 y 39? ¿Qué quieres decir? Mega-Sena no permite juegos con números repetidos. Sin embargo, la interfaz de un List tiene un método contains() que te permite comprobar si un número ya existe en la lista. Todo lo que tienes que hacer es añadir un if al insertar los números:

while (numeros.size() < 5) { 
    int numero = new Random().nextInt(50) + 1; 
    if(!numeros.contains(numero)){ 
        numeros.add(numero); 
    }
}

En este fragmento de código estoy diciendo que si el nuevo número aleatorio no existe dentro de la lista de números, debe ser añadido. Probando la nueva implementación:

Collections.sort(numeros); 
System.out.println(numeros);
Resultado:
[16, 20, 27, 34, 39, 42]

¡Ahora nuestro programa no permite números repetidos!

Hemos visto lo fácil que es ordenar números en Java, ya que disponemos de métodos para resolver este problema. Recuerda siempre estos pasos antes de ordenar:

¿Cuántos números necesito generar? ¿Puedo repetir algún número?

¿Te ha gustado la clase List? ¿Quieres aprender más APIs y librerías Java? Alura tiene una formación de Java que explica con más detalle las principales API y bibliotecas, con miles de alumnos matriculados y una recomendación del 96%.

Este articulo fue adecuado para Alura Latam por: Adriana Oliveira

Artículo Anterior
Listas en C#
Siguiente Artículo
Lenguajes de programación: una breve introducción contextualizada

Ver otros artículos sobre Programación

Navegación

  • Planes
  • Instructores
  • Blog
  • Política de privacidad
  • Términos de uso
  • Sobre nosotros
  • Preguntas frecuentes

¡CONTÁCTANOS!

  • ¡Quiero entrar en contacto!

Blog

  • Programación
  • Data Science
  • Front End
  • Innovación y Gestión
  • DevOps

AOVS Sistemas de Informática S.A CNPJ 05.555.382/0001-33

SÍGUENOS EN NUESTRAS REDES SOCIALES

YouTube Facebook Instagram Linkedin Whatsapp Spotify

NOVEDADES Y LANZAMIENTOS

Aliados

  • Programa de aceleração Scale-Up Endeavor
  • En Alura somos unas de las Scale-Ups seleccionadas por Endeavor, programa de aceleración de las empresas que más crecen en el país.
  • Growth Academy 2021 do Google For Startups
  • Fuimos unas de las 7 startups seleccionadas por Google For Startups en participar del programa Growth Academy en 2021
Alura

Powered by

Caelum

AOVS Sistemas de Informática S.A CNPJ 05.555.382/0001-33

SÍGUENOS EN NUESTRAS REDES SOCIALES

YouTube Facebook Instagram Linkedin Whatsapp Spotify

Cursos

Cursos de Programación
Lógica de Programación | Java
Cursos de Front End
HTML y CSS | JavaScript | React
Cursos de Data Science
Data Science | Machine Learning | Excel | Base de Datos | Data Visualization | Estadística
Cursos de DevOps
Docker | Linux
Cursos de Innovación y Gestión
Transformación Ágil | Marketing Analytics

Alura

  • Educação em Tecnologia

    • logo fiap FIAP
    • logo casa do codigo Casa do Código
    • logo pm3 PM3 - Cursos de Produto
  • Mais Alura

    • logo alura start START BY Alura
    • logo alura lingua Alura Língua
    • logo alura para empresas Alura Para Empresas
    • logo alura latam Alura LATAM
  • Comunidade

    • logo tech guide Tech Guide
    • logo 7 days of code 7 days of code
    • logo Hipsters ponto Jobs Hipsters ponto Jobs
  • Podcasts

    • logo Hipster Network Hipster Network
    • logo Hipsters ponto Tech Hipsters ponto Tech
    • logo Dev sem fronteiras Dev sem Fronteiras
    • logo Like a Boss Like a Boss
    • logo IA Sob Controle IA Sob Controle
    • logo Mesa de Produto Mesa de Produto
    • logo Decode Decode
    • logo FIAPCast FIAPCast