To fazendo um programa que simula o sorteio de números da megasena, os números sorteados não podem se repetir e a saída tem de ser em ordem crescente.
Fiz esse código aqui, em minha análise ele deveria funcionar corretamente, mas os três primeiros índices do array não estão recebendo valor! Alguém sabe o que pode estar acontecendo?
public static void main(String[] args) {
int[] numeros = new int[6];
for (int i = 0; i < numeros.length; i++) {
boolean ok = false;
do {
int n = (int) (Math.random() * 61);
if(Arrays.binarySearch(numeros, n) < 0) {
numeros[i] = n;
ok = true;
}
} while (!ok);
Arrays.sort(numeros);
}
System.out.printf("%d - %d - %d - %d - %d - %d\n", numeros[0], numeros[1], numeros[2], numeros[3], numeros[4], numeros[5]);
System.exit(0);
}
Coloca o Arrays.sort(numeros)
fora dos loops, antes do print.
-
Colocar o Arrays.sort(numeros)
para fora do loop fará o Arrays.binarySearch
parar de funcionar.
-
O mais correto seria:
int n = (int) (Math.random() * 60) + 1;
-
O array é inicializado com 0 por padrão e quando executado Arrays.sort(numeros)
, estes zeros vão para o inicio do array e o primeiro número sorteado vai para o final, então inicialize com um número maior que 60:
Arrays.fill(numeros, 61);
Recomendo que faça diferente, crie uma lista com os 60 números, use a classe Collections
para misturar os números (Collections.shuffle
), copie os 6 primeiros items para o array
de tamanho 6 e depois ordene.
1 curtida
int n = (int) (Math.random() * 61);
Math.random
varia de 0 a 0,9999…, se for 0 então n = 0
, mas acho n
tem que ser de 1 a 60, não pode ser 0
int n = (int) (Math.random() * 60) + 1;
o trecho Math.random() * 60
retornará de 0 a 59, com +1, n
será de 1 a 60.
Verdade, não tinha pensado nisso!
Valeu diego12, coloquei o Arrays.fill(numeros, 61)
antes do loop e funcionou corretamente!
Entendi o erro de lógica, por mais que fosse gerado um valor que não estivesse no array
e ele fosse salvo em numeros[0]
, com o Array.sort(numeros)
o número gerado vai pra numeros[5]
, cê me ajudou bastante, obrigadão
!
Também vou ler sobre a classe Collections
, valeu a dica!
Refiz o código desse jeito:
public static void main(String[] args) {
int[] sorteados = new int[6];
List<Integer> numeros = new ArrayList<Integer>();
for (int i=1; i<=60; i++) {
numeros.add(i);
}
Collections.shuffle(numeros);
for (int i = 0; i < sorteados.length; i++) {
sorteados[i] = numeros.get(i);
}
Arrays.sort(sorteados);
System.out.printf("%d - %d - %d - %d - %d - %d\n", sorteados[0], sorteados[1], sorteados[2], sorteados[3], sorteados[4], sorteados[5]);
}
Não sei se era bem isso que cê sugeriu, mas funcionou.
Outra possibilidade:
int[] sorteados = new Random().ints(1, 61).distinct().limit(6).toArray();
System.out.println(Arrays.toString(sorteados));