| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/06/2007 21:32:23
|
Octaviano DIniz
Smalltalk
![[Avatar]](/images/avatar/4ede9640e357f086a55ab84467f2bfe2.png)
Membro desde: 29/06/2007 21:22:31
Mensagens: 1
Localização: Rio Grande, RS
Offline
|
Caros participantes,
Estou iniciando no mundo Java e tenho um trabalho para apresentar, um programa com um jogo de perguntas e respostas.
Tenho o programa rodando perfeito, porém, ele não está impedindo que uma pergunta seja repetida e fiz a seguinte classe, mas não está funcionando.
Será que alguém pode ajudar.
Atenciosamente.
Octaviano Diniz
public class EmbaralharNumeros {
private int total;
public EmbaralharNumeros (int num){
total = num;
} // Fim Construtor EmbaralharNumeros
public int sorteio (){
int r, i, j;
int teste[] = new int [total];
int result [] = new int [total];
teste[0]= 0;
result [0] = 0;
//Vou criar um vetor TESTE com tamanho de TOTAL
for (i = 0; i <= total; i ++){
teste [i] = (int) (Math.random()* total);
//Tenho que verificar se o valor nao esta repetido
for (j = 0; j <= total; j++){
while ( teste[i] == result[j]){
teste [i] = (int) (Math.random()* total);
}
result [j] = teste [i];
}//Fim fo j
}// Fim for i
for ( r = 0; r <= total; r ++) {
return result[r];
}//Fim for r
}// Fim Metodo sorteio
}// Fim da classe EmbaralharNumeros
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/06/2007 21:41:14
|
thingol
Moderador
Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline
|
Se você precisa embaralhar os números de 1 a N, então não faça do jeito que você fez - Math.random funciona exatamente igual a um dado*; você sabe que os números podem se repetir.
O que você pode fazer é preencher um array com os números de 1 a N, e ir trocando a posição [i] do array com um valor na posição de [0] a [N - 1], tal como a função shuffle (veja o fonte da java.util.Arrays, método shuffle) faz.
* Um dado (dice) que tem as faces numeradas de 1 a 6, não um dado (data).
Só que em vez de voltar um número de 1 a 6, Math.random retorna um número de ponto flutuante de 0.0 a 1.0, excluindo o 1.0.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/06/2007 22:18:00
|
Zakim
JavaEvangelist
![[Avatar]](/images/avatar/e35d7a5768c4b85b4780384d55dc3620.jpg)
Membro desde: 21/07/2005 09:25:24
Mensagens: 482
Localização: Cuiabá - MT
Offline
|
conforme sua explicação, eu entendi que vc precisa que os dados sorteados não se repitam, dpois que eles ja forem sorteado certo?
Voce esta puchando esses dados para o sorteio do banco de dados?
caso não estiver, tente acumular o valor dos resultados ja sorteados em uma lista dinamica (ArrayList) e dpois faça a comparação para ver se não é repitido.
Ao invés de ficar embaralhando toda vez! embaralhe uma vez só e faça esse tipo de tratamento que fica mais bacana!
espero que tenha ajudado!
Tem um patterns que fala sobre isso!
o estado do seu objeto!
|
http://zakim.blogspot.com - Zakim
Sun Certified Java Programmer
Comece pequeno, pense grande e cresça rápido! |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/06/2007 00:05:25
|
nadilsons
JavaGuru
![[Avatar]](/images/avatar/0676f43ba89ef089f43c6f36ca40fa4a.png)
Membro desde: 25/09/2006 23:10:20
Mensagens: 222
Offline
|
Por que você não usa um HashSet ao invés de um vetor?
|
Jesus é o caminho, a verdade e a vida!
Reflection DSL - http://code.google.com/p/reflection-dsl |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/06/2007 11:59:37
|
LPJava
GUJ Hacker
Membro desde: 18/04/2006 12:50:23
Mensagens: 5524
Localização: Bahia/Porto Alegre
Offline
|
use uma das classes que implementa a interface Set de Collection. A unica maneira de nao ter elementos duplicados..mais outra dica dar uma lida nesse topico aqui é fundamental para o guj:
http://www.guj.com.br/posts/list/50115.java
|
Sun Certified Java Programmer 5.0
Blog:http://www.camilolopes.com
Twitter:www.twitter.com/camilolope
Linkedin: http://br.linkedin.com/in/camilolopes
Curso online OCPJP: http://pro.imasters.com.br/online/cursos/preparatorio-para-certificacao-java-ocjp
Autor livro Guia SCJP & JEE c/ Frameworks: http://blog.camilolopes.com.br/livrosrevistaspalestras/
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/06/2007 14:02:29
|
sergiotaborda
GUJ Expert
![[Avatar]](/images/avatar/b4a0e0fbaa9f16d8947c49f4e610b549.png)
Membro desde: 22/03/2005 20:57:48
Mensagens: 3433
Offline
|
Supondo que vc quer sortear um numero inteiro entre 1 e N
eis uma forma simples
O modo de uso é simples por causa da interface Queue
Poderia retornar um List e usar get(0) , só que essa opção envolve remover o elemento explicitamente depois de o obter com get()
Isso é desnecessário já que a interface Queue tem um método exatamente para fazer isso. Além disso , Queue , deixa claro que se trata de uma fila e não uma lista qualquer.
Nota: Alguém pode ter curiosidade de porque é usado um ArrayList e depois convertido para um LinkedList. A razão de não usar o LinkedList de um inicio é que o javadoc de Collections.suffle() afirma que se a lista não implementar RandomAccess (como ArrayList) ela será convertida para uma e depois reconvertida. Então, por simplicidade usa o ArrayList primeiro para facilitar o suffle e depois retorna LinkedList porque é a Queue mais simples que tem. Contudo outras poderiam ser retornadas se necessário.
|
Criando sua própria API de Validação
Blog do MiddleHeaven |
|
|
 |
|
|