Estou com um pequeno problema com o randon, a principio quero que sejam sorteados números de 8 á 14 sem que eles sejam repetidos, entao fiz a seguinte classe:
publicclassRandon{publicRandon(){int[]myGame=newint[9];intvalor,novovalor,s,z;intj=0;for(s=1;s<=7;s++){valor=(int)(8+Math.random()*7);myGame[s]=valor;novovalor=(int)(8+Math.random()*7);for(z=1;z<=7;z++){if(myGame1[z]==novovalor){novovalor=(int)(8+Math.random()*7);z=0;}}myGame[s]=novovalor;System.out.println(novovalor);// Aqui vocês podem ver os números sorteados}}publicstaticvoidmain(String[]args){randonfrm=newrandon();}}
A principio parece que está a ocorrer tudo bem, porém se vocês testarem, podem observar que algumas vezes são sorteados apenas 6 números e não 7, se alguém puder me ajudar eu agradeceria :S
Além disso, prefira usar a classe Random, no lugar de Math.random():
Randomr=newRandom();intx=r.nextInt(10); //Gera um número de 0 até 9.
ribclauport
Aproveitando o tópico gostaria de perguntar ao vini como usaria essa classe Randon por exemplo para retorna numeros de 3 ao 10 por exemplo, li em um
artigo que teria que usar o operador % se eu fosse delimitar uma “faixa”, poderia dar um exemplo do uso com Random delimitando uma faixa de números na
hora de randomizar?
Obrigado.
ribclauport
Bom reformulando, como seria usar o Random para delimitar um range com o uso do operador % e randon.nextInt(), poiis usando os outros métodos
fica realmente simples como no código abaixo:
private static void showRandomInteger(int aStart, int aEnd, Random aRandom) {
if (aStart > aEnd) {
throw new IllegalArgumentException("Start cannot exceed End.");
}
// get the range, casting to long to avoid overflow problems
long range = (long) aEnd - (long) aStart + 1;
// compute a fraction of the range, 0 <= frac < range
long fraction = (long) (range * aRandom.nextDouble());
int randomNumber = (int) (fraction + aStart);
log("Generated : " + randomNumber);
}