Sem repetição

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. :frowning: 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!!!