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?
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.
Jonathan_Medeiros
Bastaria testar se o número gerado já existe no array antes de adicioná-lo ao mesmo, abaixo coloquei um exemplo utilizando lista!
Exemplo:
privatevoidsorteio(){intnumber;//Receberá o número geradoList<Integer>numeros=newArrayList<>();//Lista de númerosRandomrand=newRandom();//Randon para gerar números aleatórioswhile(numeros.size()<6){//Enquanto a não obtiver os 6 números irá executarnumber=rand.nextInt(60);//Gera um número aleatório entre 0 e 60if(!numeros.contains(number)){//Caso o número gerado já exista na lista, o mesmo não será adicionado novamentenumeros.add(number);//Adicionando o número na lista }}Collections.sort(numeros);//Ordenando a listafor(inti=0;i<numeros.size();i++){System.out.println(numeros.get(i));//Apresentando a lista}}
L
LeonardoSouza
o que vc poderia me indicar ? usar apenas um for? o que eu colocaria no if ?
Harmendani
O amigo Jonathan_Medeiros esclareceu com código a minha explicação
L
LeonardoSouza
Então só que ele usou List, eu estou tentando fazer sem método , usei apenas o random porque não tinha jeito.
Jonathan_Medeiros
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!
staroski
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:
importjava.util.ArrayList;importjava.util.List;importjava.util.Random;publicclassNumeros{privateList<Integer>numeros;publicNumeros(intde,intate){numeros=newArrayList<>();for(intnumero=de;numero<=ate;numero++){numeros.add(numero);}}publicintsortear(){if(numeros.isEmpty()){thrownewIllegalStateException("Todos os numeros já foram sorteados!");}intlimite=numeros.size();Randomrandom=newRandom();intsorteado=random.nextInt(limite);returnnumeros.remove(sorteado);}}
Exemplo de uso:
importjava.util.Arrays;publicclassExemplo{publicstaticvoidmain(String[]args){Exemploprograma=newExemplo();programa.executar();}privatevoidexecutar(){intjogo[]=newint[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 REPETIDOSNumerosnumeros=newNumeros(1,60);for(intcont=0;cont<jogo.length;cont++){intsorteado=numeros.sortear();jogo[cont]=sorteado;}System.out.println("\nPreenchimento Original: ");for(intdezena:jogo){System.out.printf(" %d ",dezena);}// EXIBIR EM ORDEM CRESCENTEArrays.sort(jogo);System.out.println("\nExibição Ordenada: ");for(intdezena:jogo){System.out.printf(" %d ",dezena);}}}