Ordenando números em Java

Alex Felipe Victor Vieira
Alex Felipe Victor Vieira

Compartilhe

Por esses dias a Mega-Sena acumulou de novo... Chegou ao valor de R$ 200 milhões! Porém, eu sempre fico muito indeciso em qual jogo fazer, então vou pedir para que o meu sistema jogue por mim. Vamos criar nosso array de int de 6 posições para armazenar os números:


int numeros = new int[6];

Agora varremos nosso array e preenchemos cada posição com um valor aleatório entre 1 e 60, utilizando a classe Random e seu método nextInt():


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

Imprimindo o nosso array com o método toString() da classe Arrays:


System.out.println(Arrays.toString(numeros));

Resultado:

[10, 6, 54, 47, 0, 35]

Ele gerou 6 números aleatórios! Mas, espera aí... um desses números é o 0??? A Mega-Sena sorteia apenas números entre 1 e 60... O método nextInt() com parâmetro 60 significa que será retornado um valor do tipo int entre 0 e 59. Para resolver esse problema, precisamos somar 1 no momento que geramos os números aleatórios:


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

Resultado:

[53, 32, 60, 1, 40, 24]

Ótimo! O sistema gerou um jogo da Mega-Sena! E, como podemos ver, dessa vez o número 60 apareceu.

Mas ainda tem um probleminha, esses números estão desordenados... Imagina na hora de preencher o volante da Mega-Sena: marco o 53, depois o 32 e depois terei que avançar para o número 60! E quando sair o resultado? Terei que procurar a dedo? Que horror! O método estático sort() da classe Arrays nos auxilia na ordenação de vetores numéricos:


Arrays.sort(numeros); 
System.out.println(Arrays.toString(numeros));

Resultado:

[13, 21, 37, 48, 51, 55]

Excelente! Conseguimos gerar o nosso jogo da Mega-Sena! Mas agora, ao invés de utilizar um array, eu quero usar uma solução mais sofisticada. Uma List,por exemplo:


List numeros = new ArrayList();

Agora, vamos preencher a nossa List com um while:


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

E para ordenar? Usarei o método sort() da classe Arrays? Infelizmente o método sort() da classe Arrays espera apenas arrays como parâmetro e uma List é uma Collection... Porém existe o método estático sort() para Collection utilizando a classe Collections:


Collections.sort(numeros);
System.out.println(numeros);

Resultado:

[9, 12, 16, 49, 49, 56]

Ele gerou o jogo como esperado! Mas, espera um pouco... 49 e 49? Como assim?? A Mega-Sena não permite jogos com números repetidos... A interface List possui o método contains() que permite verificar se um número já existe dentro da lista. Então, basta adicionar um if no momento da inserção dos números:


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

Nesse trecho estou dizendo que, se não existir o novo número aleatório dentro da lista de números, adicione. Testando a nova implementação:


Collections.sort(numeros); 
System.out.println(numeros);

Resultado:

[16, 20, 27, 34, 39, 52]

Agora o nosso sistema não permite números repetidos!

Vimos como é fácil ordenar números em Java, pois já temos métodos disponíveis para resolver esse problema. Lembre-se sempre desses passos antes de ordenar:

  • Quantos números preciso gerar?
  • Posso repetir algum número?

Gostou da List? Quer aprender mais APIs e bibliotecas do Java? A Alura possui um curso de Java que explica com mais detalhes as principais APIs e bibliotecas, com 3.158 alunos inscritos e com recomendação de 96%.

Alex Felipe Victor Vieira
Alex Felipe Victor Vieira

Alex é instrutor e desenvolvedor e possui experiência em Java, Kotlin, Android. Criador de mais de 40 cursos, como Kotlin, Flutter, Android, persistência de dados, comunicação com Web API, personalização de telas, testes automatizados, arquitetura de Apps e Firebase. É expert em Programação Orientada a Objetos, visando sempre compartilhar as boas práticas e tendências do mercado de desenvolvimento de software. Atuou 2 anos como editor de conteúdo no blog da Alura e hoje ainda escreve artigos técnicos.

Veja outros artigos sobre Programação