Embaralhar uma array e selecionar os primeiros elementos

Eu quero ter um método que pega as perguntas que estão no banco de dados, e retorna para tela, ja consegui so que eu selecionava pelo id, dai podia vim repetidas, não faz sentido um quiz com perguntas repetidas.Portanto eu adicionei em uma lista para não ter problema de repetidas e pensei em usar o método shuffle mas vi que ele não tem o método shuffle, o que eu posso fazer?

Tenho esse método que seleciona as perguntas que estão no banco de dados e adiciona em uma lista.

[code]
public List seleciona() throws SQLException{
PreparedStatement stmt = this.connection.prepareStatement(“select * from quiz”);
ResultSet rs = stmt.executeQuery();

    List<Pergunta> lista = new ArrayList<Pergunta>();
    Pergunta pergunta = new Pergunta();
    
    while(rs.next()){
        pergunta.setPergunta(rs.getString("pergunta"));
        pergunta.setAlternativa1(rs.getString("alternativa1"));
        pergunta.setAlternativa2(rs.getString("alternativa2"));
        pergunta.setAlternativa3(rs.getString("alternativa3"));
        pergunta.setAlternativa4(rs.getString("alternativa4"));
        pergunta.setCorreta(rs.getInt("correta"));
        lista.add(pergunta);
          }
    
    return lista;
    
}[/code]

Por que pelo id podem vir repetidas? Isso não aconteceria se ele fosse a chave primária da tabela (a menos que em ids diferentes tenham a mesma pergunta).

Se qualquer modo, para embaralhar uma lista (e não um array), use o método Collections.shuffle.

A sua lista de perguntas pode ser um Set e dele poderias pegar as questões. Usar o Collections.shuffle para embaralhar não garante muita coisa, pois a ordem de um ArrayList e de um HashSet não é garantidamente linear ( isso é, ele não obedece ordem de inserção ).

Até!

Nao sei trabalhar com banco de dados em Java mas vou te falar e voce ve se da certo…

Nao teria como pegar o as perguntas e passar para um array?

Tem uma classe que chama Random que faz isso, mostra dados aleatorios… logico que pode ocorrer de mostrar a mesma mensagem, mas essa é classe que eu vi em um exemplo do livro do deitel…

Caso voce quiser posso te mandar a classe depois… so falar que quer que eu te passo por MP…

Abraços

Bruno, é a chave primária só que eu tinha pensado de colocar um random para sortear a chave primária, mas não teria sentido vim perguntas repetidas.

Maquiavel, eu não preciso embaralhar, mas eu preciso pegar perguntas aletórias, sem repetir, vou testar alguma dessas coisas dei uma olhada em Collections, mas não estudei muito isso.

BlackFalcon, eu pensei nisso ai também :lol:

Amanhã vou testar algo, já que hoje tenho que estudar para prova de amanhã.

Oras, sorteie os números primeiro, tenha certeza que os elementos do conjunto sorteado não se repetem, e, a partir dele, obtenhas as perguntas.

...        
        Collections.shuffle(lista); //embaralho as perguntas antes de retornar
        
        return lista;
        
    }

Na tela do jogo, onde irá aparecer as perguntas, estou com uma dúvida.
Estou usando esse método para colocar a pergunta na tela

private void start(List<Pergunta> lista) {
        for(int i = 0; i < lista.size(); i++){
         Pergunta pergunta = new Pergunta();
        
        lbPergunta.setText(pergunta.getPergunta());   
        jRadioButton1.setText(pergunta.getAlternativa1());
        jRadioButton2.setText(pergunta.getAlternativa2());
        jRadioButton3.setText(pergunta.getAlternativa3());
        jRadioButton4.setText(pergunta.getAlternativa4());
        this.correta = pergunta.getCorreta();
        }
    }

Tá meio sem sentido o for, mas não consegui pensar uma alternativa para das perguntas embaralhadas, eu uso a primeira dai após clicar no botão confirmar, aparece a outra pergunta.