Números aleatórios sem repetição

olá a todos estou com um problema em uma aplicação e quero ajuda de vocês pois meu conhecimento em java é pouco.Vamos lá,eu criei uma aplicação com uma interface gráfica onde há um banco de dados usando o postgresql e essa aplicação faz o seguinte,ela gera uma pergunta de acordo com o índice que aparece em uma jlabel.

ex.: tem um botão chamado gerar pergunta e quando eu clico nele ele gera um número aleatório de acordo com o total de perguntas cadastradas no banco de dados a minha dúvida é o seguinte , eu tenho um método que gera a numeracao aleatória so que gera com repetição ou seja o indice as vezes gera 3 vezes e eu quero sem repeticao coloquei dois for mas mesmo assim ainda gera repetido o que estou errando abaixo esta o método

public int gerarPerguntaAleatoria(BeansFederal f){
        BeansFederal aux = new DaoFederal().contarTotalPerguntas();
        int[] num = new int[aux.getTotalPergunta()];
        int  p = 0;
        
        for(int i = 0; i < num.length; i++){
            
            p = f.getR().nextInt(aux.getTotalPergunta()) + 1;
            
            
            for(int j = 0; j < num.length; j++){
                
                if(p==num[j] & j!=i){
                    
                    p = f.getR().nextInt(aux.getTotalPergunta()) + 1;
                    
                }else{
                    num[i]=p;
                   
                }
            }
        }
        
      //p = 1 +  f.getR().nextInt(aux.getTotalPergunta());
      
        f.setCodigo(p);
       
       return p;
       
    }

Boa tarde. Confesso que n entendi e nem parei para entender seu código, porém acredito que se vc usar um While (Enquanto), nesse caso, será bem melhor.
No código abaixo eu gravei o ultimo numero gerado em uma variável global, desta forma, acredito que o While ficara executando ate que encontre um numero diferente.
Eu super recomendo vc buscar por alguma classe Random, deve existir.

int numeroAntigo = 0;

public int gerarPerguntaAleatoria(BeansFederal f)) {
   BeansFederal aux = new DaoFederal().contarTotalPerguntas();
    int[] num = new int[aux.getTotalPergunta()];
    int p = 0;
    int i = 0;
    while (num.length < i && p != numeroAntigo) {
        p = f.getR().nextInt(aux.getTotalPergunta()) + 1;
        i++;
    }
    numeroAntigo = p;
    f.setCodigo(p);
    return p;
}

PS: meu código n funciona, apenas criei este exemplo para servir como base