A ver... tengo entendido que:
1. Tienen que salir las preguntas en desorden
2. No se pueden repetir
Teniendo en cuenta esas dos cosas analicemos lo siguiente:
El arreglo tiene X posiciones, y cada posición referencia un objeto de la clase Pregunta, el cual tiene un método para lanzar la pregunta. Siendo así, lo mejor en este caso es crear un segundo arreglo, de enteros, que serán los indices del arreglo de objetos pregunta. Así, si tenias antes algo como esto (en donde las preguntas se hacen siempre en el mismo orden):
for(int i = 0 ; i < preguntas.length; i++)
{
preguntas[i].preguntar();
//lo que sea
}
... deberías crear primero un arreglo de enteros en desorden así:
int[] arregloDesordenado = new int[preguntas.length];
for(int i = 0 ; i < preguntas.length; i++)
{
int temp
= (int) (Math.
random() * 20); while(repetido(arregloDesordenado, temp))
temp
= (int) (Math.
random() * 20); arregloDesordenado[i] = temp;
}
luego, el método repetido() sería algo como esto:
public boolean repetido(int[] arregloDesordenado, int x)
{
for(int i = 0 ; i < arregloDesordenado.length; i++)
if(arregloDesordenado[i]==x)
return true;
return false;
}
Luego... solo deberías hacer esto para lanzar las preguntas:
for(int i = 0 ; i < preguntas.length; i++)
{
preguntas[arregloDesordenado[i]].preguntar();
//lo que sea
}
¿Lo pillas?
Pd. No tengo un compilador, así que no lo he probado
pero... esa es la idea.
Un saludo!