Gostaria gerar 6 números aleatórios, porem devem ser diferentes
. O meu código que eu fiz, só que ainda os números se repetem ! e não queria usar nenhum método. O que estou fazendo de errado?
public static void main(String[] args) {
int sorteado = 0, cont, i;
int jogo[] = {0, 0, 0, 0, 0, 0};
// Gerar 6 numeros aleatorios
// DEVEM ESTAR ENTRE 1 E 60 ALEATORIOS
//Vamos sortear 6 números de 0 até 60 sem repetição
// NÃO PODE HAVER NUMEROS REPETIDOS
for(cont = 0; cont < 6; cont ++ ) {
sorteado = (int)(1 + Math.random() * 60);
jogo[cont] = sorteado;
if (jogo[cont] == sorteado) {
for(i = 0; i< 6; i ++) {
sorteado = (int)(1 + Math.random() * 60);
jogo[cont] = sorteado;
}
}else {
break;
}
}
System.out.println("\nPreenchimento Original: ");
for (int dezena : jogo) {
System.out.printf(" %d ", dezena);
}
// EXIBIR EM ORDEM CRESCENTE
Arrays.sort(jogo);
System.out.println("\nExibição Ordenada: ");
for(int dezena : jogo) {
System.out.printf(" %d ", dezena);
}
}
}
Basicamente, no seu primeiro for
, antes de salvar na variavel sorteado
o número gerado por Math.random()
, verifique se o número sorteado está no seu vetor jogo[]. Se estiver, sorteie de novo. Senão, prossiga e salve o número aleatório gerado.
Apenas coloque essa lógica no sorteio para que não haja repetição. Não entendi o uso de um segundo for. Assim você correrá o risco de que o método gere repetição na sua variável sorteado.
Para implementar isso você pode usar um while ou for para percorrer o seu vetor jogo[]. O erro do seu código está na ocorrência dessa linha:
if (jogo[cont] == sorteado)
Repare que você compara apenas a iteração do laço atual e não pecorre o vetor jogo[0…n-1] em que n é o tamanho declarado do vetor.
Bastaria testar se o número gerado já existe no array antes de adicioná-lo ao mesmo, abaixo coloquei um exemplo utilizando lista!
Exemplo:
private void sorteio() {
int number;//Receberá o número gerado
List<Integer> numeros = new ArrayList<>();//Lista de números
Random rand = new Random();//Randon para gerar números aleatórios
while (numeros.size() < 6) {//Enquanto a não obtiver os 6 números irá executar
number = rand.nextInt(60);//Gera um número aleatório entre 0 e 60
if (!numeros.contains(number)) {//Caso o número gerado já exista na lista, o mesmo não será adicionado novamente
numeros.add(number);//Adicionando o número na lista
}
}
Collections.sort(numeros);//Ordenando a lista
for (int i = 0; i < numeros.size(); i ++) {
System.out.println(numeros.get(i));//Apresentando a lista
}
}
o que vc poderia me indicar ? usar apenas um for? o que eu colocaria no if ?
O amigo Jonathan_Medeiros esclareceu com código a minha explicação
Então só que ele usou List, eu estou tentando fazer sem método , usei apenas o random porque não tinha jeito.
O código que você tem de fazer é idêntico ao do exemplo que te passei!
Basta adaptar utilizando array ao invés de uma lista, o código está todo comentado o que facilita a adaptação!
Se você criar uma classe que funciona igual aqueles globos cheios de bolinhas, tudo fica mais fácil:
Classe que contém as bolinhas de números:
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class Numeros {
private List<Integer> numeros;
public Numeros(int de, int ate) {
numeros = new ArrayList<>();
for (int numero = de; numero <= ate; numero++) {
numeros.add(numero);
}
}
public int sortear() {
if (numeros.isEmpty()) {
throw new IllegalStateException("Todos os numeros já foram sorteados!");
}
int limite = numeros.size();
Random random = new Random();
int sorteado = random.nextInt(limite);
return numeros.remove(sorteado);
}
}
Exemplo de uso:
import java.util.Arrays;
public class Exemplo {
public static void main(String[] args) {
Exemplo programa = new Exemplo();
programa.executar();
}
private void executar() {
int jogo[] = new int[6];
// Gerar 6 numeros aleatorios
// DEVEM ESTAR ENTRE 1 E 60 ALEATORIOS
// Vamos sortear 6 números de 0 até 60 sem repetição
// NÃO PODE HAVER NUMEROS REPETIDOS
Numeros numeros = new Numeros(1, 60);
for (int cont = 0; cont < jogo.length; cont++) {
int sorteado = numeros.sortear();
jogo[cont] = sorteado;
}
System.out.println("\nPreenchimento Original: ");
for (int dezena : jogo) {
System.out.printf(" %d ", dezena);
}
// EXIBIR EM ORDEM CRESCENTE
Arrays.sort(jogo);
System.out.println("\nExibição Ordenada: ");
for (int dezena : jogo) {
System.out.printf(" %d ", dezena);
}
}
}