Générer la non répétition de nombre aléatoire au sein de la gamme en Java

Je veux générer des nombres aléatoires à l'intérieur de la fourchette de 1 à 4, 4, y compris.

Voici mon code:

int num = r.nextInt(4) + 1;  //r is instance of Random.

Cependant, je suis en cours d'exécution le code ci-dessus dans une boucle et ne veulent pas répéter de nombre aléatoire.
Ce qui arrive maintenant est souvent que j'obtiens:

1,1,1,2,3,1,4,2,2,1,4,2,4,4,2,1,4,3,3,1,4,2,4,1 que ma sortie.

Ici, si les chiffres sont aléatoires au sein de la gamme(1-4), mais souvent répétés, comme le nombre de "1"dans les 3 premières itérations.

Ce que je cherche, c'est un moyen d'obtenir la non répétition de nombres aléatoires à l'intérieur de la boucle.
La manière la plus simple je sais, c'est de garder le dernier nombre aléatoire avant de l'itération en cours et de comparer, mais je suis sûr qu'il doit y avoir une meilleure solution à ce.

Merci à l'avance.

Cela ne serait pas vraiment aléatoire de plus serait-il? (xkcd post ect ect)
eh bien, après vous produire, disons, 4,1,3,2, vous allez avoir de répétitions... comment voulez-vous gérer ce cas?
aussi, je suis d'accord avec la collecte.shuffle(), mais serait-ce une bonne idée d'appeler collection.shuffle() à chaque itération et qui fou la preuve de la non répétitif de la nature ?
Je suis bien en 4,1,3,2 ce que je ne veux pas, c'est 1,1,3,4,2,2. Les mêmes numéros apparaissant côte à côte.
Donc 4,1,3,4,1,2,3,2 serait ok aussi?

OriginalL'auteur ashish.gd | 2012-12-13