ola galera, tenho uma aplicação java que eu preciso que ele sorteie as perguntas mas que elas não se repitam;, eu tenho como exemplo;
String pergunta1=" qual pais? ";
String pergunta2="qual nome? ";
String pergunta3="qual imagem? ";
String pergunta4="qual posicao ?";
estou utilizando Netbeans e uma interface grafica, preciso colocar isso em um BOTAO;
public String Sortear_perguntas(){
List<String> nomes=new ArrayList<String>();
nomes.add(pergunta1);
nomes.add(pergunta2);
nomes.add(pergunta3);
nomes.add(pergunta4);
Collections.shuffle(nomes);
return nomes.get((int)Math.random()*nomes.size());
}
tenho isso, mas elas se repetem, eu quero que elas acabam, alguma ajuda?
Dê um Collections.shuffle(nomes)
e sempre selecione a primeira posição.
Depois disso, remova aquele elemento da Coleção com nomes.remove(0)
public String Sortear_perguntas(){
List<String> nomes=new ArrayList<String>();
nomes.add(pergunta1);
nomes.add(pergunta2);
nomes.add(pergunta3);
nomes.add(pergunta4);
Collections.shuffle(nomes);
String selec=nomes.get(0);
nomes.remove(0);
return nomes.get((int)Math.random()*nomes.size());
}
isso ? fiz isso mas nao deu certo.
eu jogo esse return em um Jlabel, e sempre repete
Percebi que você está declarando a Lista e as perguntas no escopo do método. Portanto, sempre que você chama-lo, as perguntas serão inseridas novamente na Lista.
Outra coisa que reparei é o seguinte: você está capturando o valor e atribuindo à variável select
, mas não está retornando o que capturou.
Mude seu return para return selec;
o que eu posso fazer em relação a isto? ( desculpa sou iniciante kk)
Bom, você pode declarar a Lista no escopo da classe (globalmente), criar um método para popular e um método para retornar. Algo assim:
public class MinhaClasse {
// repare que declarei apenas no escopo da classe. fora de qualquer método
List<String> lista = new ArrayList<String>();
// método para popular a Lista
public void populaLista(){
String palavra1 = "Palavra 1";
String palavra2 = "Palavra 2";
String palavra3 = "Palavra 3";
String palavra4 = "Palavra 4";
String palavra5 = "Palavra 5";
lista.add(palavra1);
lista.add(palavra2);
lista.add(palavra3);
lista.add(palavra4);
lista.add(palavra5);
}
// seleciona uma palavra aleatória, a remove da Lista e a retorna
public String selecionaPalavra(){
Collections.shuffle(lista);
return lista.remove(0);
}
}
Quando seu programa iniciar, você chama o método populaLista();
e no evento do botão, você chama o método selecionaPergunta();
Exemplo de uso do selecionaPergunta()
-> label.setText(selecionaPergunta());
Algo +/- assim.
1 curtida
Aee! Consegui, fiz isto mesmo.
Obrigado!!!