Ordenando números em Java
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%.