[i]Bom, eu vi o código de vcs mas ainda falta algumas coisas no q preciso fazer:
Estou fazendo um TCC, q é um jogo tipo Quiz (q ja faz conexão com o banco de dados MySql), e precisava saber como posso criar, pelo NetBeans, um array q guarde o meu total de perguntas q possuo do banco, mas q ao msmo tempo funcione d forma randômica, fazendo com q as perguntas ñ sejam apresentadas ao usuário sempre na msma ordem, e q ñ repita a msma pergunta depois q for mostrada ao usuário.
Grata a qm puder me ajudar!
Grande abraço!
String[] perguntas = new String[]{“p1”,“p2”,“p3”};
String perguntaRandom = perguntas[ (int)(Math.random()*perguntas.length()) ];
Ola,
Codigo criado no processo de prototipagem de um sistema para e-learning dentro do grupos de estudos OSUM MetroCarioca.
Classe Quiz Random gerencia perguntas e perguntas respondidas;
[code]package br.com.amsterdaintelligence.quizrandom;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
/**
*
-
@author amsterda
*/
public class QuizRandom {
private List perguntas;
private List perguntasRespondidas;
private Random randomGenerator;
//Inicia o Quiz com perguntas vindas da base de dados, colocadas em um List
public QuizRandom(List perguntas) {
this.perguntas = perguntas;
this.perguntasRespondidas = new ArrayList();
this.randomGenerator = new Random();
}
public Pergunta pegaPergunta() {
// Pega uma pergunta aleatoriamente no vetor de perguntas;
Pergunta perguntaAuxiliar = this.perguntas.get(this.randomGenerator.nextInt(perguntas.size()));
//Se o vetor de perguntas já respondidas não contiver a pergunta pega randomicamente;
if (!perguntaJaRespondida(perguntaAuxiliar)) {
perguntasRespondidas.add(perguntaAuxiliar);
return perguntaAuxiliar;
}
return pegaPergunta();
}
public boolean perguntaJaRespondida(Pergunta perguntaAuxiliar) {
//Verifica se a pergunta já foi respondida
boolean perguntaJaRespondida = perguntasRespondidas.contains(perguntaAuxiliar);
return perguntaJaRespondida;
}
public List getPerguntas() {
List perguntasAuxiliar = new ArrayList();
for (Pergunta pergunta : perguntas) {
perguntasAuxiliar.add(pergunta);
}
return perguntasAuxiliar;
}
}[/code]
Classe Pergunta:
[code]package br.com.amsterdaintelligence.quizrandom;
/**
*
-
@author amsterda
*/
public class Pergunta {
private String conteudoPergunta;
public Pergunta(String conteudoPergunta) {
this.conteudoPergunta = conteudoPergunta;
}
public String getConteudoPergunta() {
return conteudoPergunta;
}
public void setConteudoPergunta(String conteudoPergunta) {
this.conteudoPergunta = conteudoPergunta;
}
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
final Pergunta other = (Pergunta) obj;
if ((this.conteudoPergunta == null) ? (other.conteudoPergunta != null) : !this.conteudoPergunta.equals(other.conteudoPergunta)) {
return false;
}
return true;
}
@Override
public int hashCode() {
int hash = 3;
hash = 67 * hash + (this.conteudoPergunta != null ? this.conteudoPergunta.hashCode() : 0);
return hash;
}
@Override
public String toString() {
return new StringBuilder().append("\nPergunta: ").append(this.conteudoPergunta).toString();
}
}[/code]
Testes para classe QuizRandom no Netbeans com JUnit 4
[code]package br.com.amsterdaintelligence.quizrandom;
import java.util.Arrays;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import static org.junit.Assert.*;
/**
*
-
@author amsterda
*/
public class QuizRandomTest {
public QuizRandomTest() {
}
@BeforeClass
public static void setUpClass() throws Exception {
}
@AfterClass
public static void tearDownClass() throws Exception {
}
// TODO add test methods here.
// The methods must be annotated with annotation @Test. For example:
//
// @Test
// public void hello() {}
@Test
public void testInicializaçãoDasPerguntas() {
Pergunta pergunta1 = new Pergunta(“Pergunta teste1”);
Pergunta pergunta2 = new Pergunta("Pergunta teste2");
QuizRandom qr = new QuizRandom(Arrays.asList(pergunta1, pergunta2));
assertEquals(pergunta1, qr.getPerguntas().get(0));
assertEquals(pergunta2, qr.getPerguntas().get(1));
}
@Test
public void testPerguntaJaRespondida() {
Pergunta pergunta1 = new Pergunta(“Pergunta teste1”);
Pergunta pergunta2 = new Pergunta("Pergunta teste2");
QuizRandom qr = new QuizRandom(Arrays.asList(pergunta1, pergunta2));
Pergunta perguntaRespondida = qr.pegaPergunta();
assertTrue(qr.perguntaJaRespondida(perguntaRespondida));
}
@Test
public void testPerguntaNaoFoiRespondida() {
Pergunta pergunta1 = new Pergunta(“Pergunta teste1”);
Pergunta pergunta2 = new Pergunta("Pergunta teste2");
QuizRandom qr = new QuizRandom(Arrays.asList(pergunta1, pergunta2));
Pergunta perguntaRespondida = qr.pegaPergunta();
if (perguntaRespondida.equals(pergunta1)) {
assertFalse(qr.perguntaJaRespondida(pergunta2));
} else {
assertFalse(qr.perguntaJaRespondida(pergunta1));
}
}
@Test
public void testPerguntaExibidaNaTelaDaFormaCorreta() {
Pergunta pergunta1 = new Pergunta(“Pergunta teste1”);
assertEquals(pergunta1.toString(), “\nPergunta: Pergunta teste1”);
}
}[/code]
Nota que os numeros gerados tanto por Math.random(), como por new Random.nextInt() são pseudo-randomicos, ou seja, são baseados no clock e desta forma as sequencias tendem a se repetir e não parecerem realmente aleatorias.Contudo para diminuir a complexidade, não foi usado um algoritmo gerador de numeros randomicos especializado .
Espero ter ajudado!
[ ]'s
Um meio bem simples de se fazer isso é usando Collections. Veja um pequeno (porém funcional) exemplo:
public class Pergunta {
private String pergunta;
private String resposta;
public Pergunta(String pergunta, String resposta) {
this.pergunta = pergunta;
this.resposta = resposta;
}
public String getPergunta() {
return pergunta;
}
public String getResposta() {
return resposta;
}
}
import java.util.Collections;
import java.util.LinkedList;
import java.util.Scanner;
public class ComboModel {
public static void main(String[] args) {
// LinkedList que usaremos para guardar as perguntas
LinkedList<Pergunta> perguntas = new LinkedList<Pergunta>();
// adicionamos as perguntas, você precisaria resgatar isso do BD
perguntas.add(new Pergunta("Qual o melhor site sobre Java do Brasil?",
"GUJ"));
perguntas.add(new Pergunta(
"A Sun Microsystems foi recentemente comprada"
+ " por qual empresa?", "Oracle"));
perguntas.add(new Pergunta(
"Complete a frase: Errar é humano, persistir no erro é...",
"bug"));
// aqui está a sacada: embaralhamos a nossa lista de perguntas
Collections.shuffle(perguntas);
// vamos ler do teclado
Scanner teclado = new Scanner(System.in);
// enquanto houverem mais perguntas, usamos o método poll() que resgata
// e remove a primeira pergunta da lista
for (Pergunta p = perguntas.poll(); p != null; p = perguntas.poll()) {
// imprimimos a pergunta
System.out.println(p.getPergunta());
// e lemos a resposta
String resposta = teclado.nextLine();
// se for igual, OK, senão mostra a resposta certa
if (resposta.toLowerCase().contains(p.getResposta().toLowerCase())) {
System.out.println("Exato!");
} else {
System.out.println("Errado... A resposta certa seria: '"
+ p.getResposta() + "'");
}
}
}
}
[i][color=purple]Vlw por responderem pessoal, foi de ótima ajuda!!!
bjos… ;D[/color][/i]
Boa tarde pessoal, ressuscitando esse post, como eu faria se quisesse fazer essa aplicação multi escolha?