Oi Pessoal, Tenho esse método que me dá um número gerado aleatoriamente pra escolha da pergunta que será exibida em um quiz.
A idéia é “marcar” a pergunta q já foi exibida para que ela não seja exibida novamente. Por isso coloco essa pergunta dentro do vetor n0… mas parece que não está verificando se a pergunta já foi exibida ou não…
alguém pode me ajudar por favor?
Editando para explicar melhor…
questions é uma variável privada do tipo int inicializada como zero que conta quantas perguntas já foram exibidas. Ela é declarada na classe pública Question. Cada vez que uma pergunta é exibida essa variável é incrementada.
private int questions = 0;
/* retorna o numero aleatorio de pergunta */
private int getRandomQuestion() {
/* obtem o numero randomico */
n0[questions]=rnd.nextInt(getMaxQuestions());
/* verifica se a pergunta já foi exibida */
for(int i=0;i<n0.length; i++){
if (n0[i] == n0[questions]){
getRandomQuestion();
break;
}
}
return n0[questions];
}
BKling,
Fiz um código em 2 palitos aqui. Veja se te ajuda em alguma coisa.
public class Questao {
private String questao;
public Questao(String questao) {
this.questao = questao;
}
public String getQuestao() {
return this.questao;
}
public void setQuestao(String questao) {
this.questao = questao;
}
}
public class Questoes {
private List<Questao> questoes;
private List<Questao> questoesExibidas;
private Random rnd;
public Questoes() {
this.questoes = new ArrayList<Questao>();
this.questoesExibidas = new ArrayList<Questao>();
this.rnd = new Random();
loadQuestions();
}
private void loadQuestions() {
Questao q1 = new Questao("Questão 01");
Questao q2 = new Questao("Questão 02");
Questao q3 = new Questao("Questão 03");
Questao q4 = new Questao("Questão 04");
Questao q5 = new Questao("Questão 05");
Questao q6 = new Questao("Questão 06");
Questao q7 = new Questao("Questão 07");
Questao q8 = new Questao("Questão 08");
Questao q9 = new Questao("Questão 09");
Questao q10 = new Questao("Questão 10");
Questao q11 = new Questao("Questão 11");
Questao q12 = new Questao("Questão 12");
Questao q13 = new Questao("Questão 13");
Questao q14 = new Questao("Questão 14");
Questao q15 = new Questao("Questão 15");
Questao q16 = new Questao("Questão 16");
Questao q17 = new Questao("Questão 17");
Questao q18 = new Questao("Questão 18");
Questao q19 = new Questao("Questão 19");
Questao q20 = new Questao("Questão 20");
questoes.add(q1);
questoes.add(q2);
questoes.add(q3);
questoes.add(q4);
questoes.add(q5);
questoes.add(q6);
questoes.add(q7);
questoes.add(q8);
questoes.add(q9);
questoes.add(q10);
questoes.add(q11);
questoes.add(q12);
questoes.add(q13);
questoes.add(q14);
questoes.add(q15);
questoes.add(q16);
questoes.add(q17);
questoes.add(q18);
questoes.add(q19);
questoes.add(q20);
}
private void getRandomQuestion(Set<Integer> tentativas) {
if(this.questoesExibidas.size() == this.getMaxQuestions()) {
return;
}
int q = 0;
do {
q = rnd.nextInt(getMaxQuestions());
} while(tentativas.contains(new Integer(q)));
tentativas.add(q);
Questao qt = this.questoes.get(q);
boolean found = false;
for(Questao qtex : this.questoesExibidas) {
if(qt.equals(qtex)) {
found = true;
break;
}
}
if(found == true) {
getRandomQuestion(tentativas);
} else {
this.questoesExibidas.add(qt);
}
}
public Questao getQuestaoAtual() {
getRandomQuestion(new HashSet<Integer>());
return this.questoesExibidas.get(this.questoesExibidas.size() - 1);
}
private int getMaxQuestions() {
return this.questoes.size();
}
public List<Questao> getQuestoes() {
return this.questoes;
}
public List<Questao> getQuestoesExibidas() {
return this.questoesExibidas;
}
public static void main(String[] args) {
Questoes qts = new Questoes();
for(int i=0;i<10;i++) {
System.out.println((i+1) + "a Tentativa: " + qts.getQuestaoAtual().getQuestao());
if(qts.getQuestoesExibidas().size() == qts.getMaxQuestions()) {
break;
}
}
}
}
Testei aqui e funcionou, mas é aconselhável vc testar melhor… caso tenha interesse.
@braços,