2009-08-08 6 views
3

Supposons que j'ai un tableau/vecteur de nombres comme 1,3,7,9 alors j'ai besoin de deviner un nombre de cette liste au hasard. En utilisant la classe Random en Java, il semble impossible de le faire. Quelqu'un pourrait-il m'aider à dire un moyen de faire ce genre de chose? Je dois changer la liste des nombres utilisés pour générer un nombre aléatoire. J'essaie de mettre en œuvre une stratégie pour jouer au jeu de combat automatiquement comme une cession. Veuillez m'aider à faire cela?Comment générer un nombre aléatoire avec Java à partir d'une liste de nombres donnés

Répondre

4

Mettez les numéros dans un ArrayList et utilisez Collections.shuffle(arrayList);

+5

Pourquoi prendre O (N) quand O (1) suffira? – Tordek

+0

Mais dans mon cas, j'ai besoin de plusieurs hits à la fois. Habituellement jeu Battleship joué un par un hits, voici son modifiable à l'initialisation du jeu –

18

Si vous voulez juste sélectionner un nombre aléatoire uniquement, ou si vous voulez sélectionner plusieurs nombres aléatoires avec la réinsertion (c.-à-permettre la possibilité de choisir le même nombre à plusieurs reprises), vous pouvez générer un index aléatoire:

List<Integer> lst = ....; 
int index = new Random().nextInt(lst.size()); 
Integer randomeValue = lst.get(index); 

Vous pouvez également utiliser un tableau. Cela nécessite O(1) pour chaque sélection.

Si vous devez sélectionner plusieurs nombres aléatoires distincts dans la liste, l'utilisation de Collections.shuffle() et l'itération de la liste constitueraient une meilleure solution. Cela nécessite O(n) pour toutes les requêtes.

+0

Merci pour vos réponses aimables. c'est vraiment utile –

+1

Si vous avez besoin de plusieurs nombres aléatoires, n'oubliez pas de réutiliser la même instance aléatoire au lieu d'en ajouter une à chaque fois. –

0

Je suis avec tordek sur celui-ci: Le shuffling ne semble-t-il pas être un moyen assez lourd pour sélectionner un nombre configuré de nombres aléatoires d'un vecteur source?

Ne serait-il pas plus rapide de prendre simplement msaeed pour savoir comment choisir un nombre aléatoire et le répéter n fois? Peut-être assembler vos valeurs aléatoires comme un ensemble, et continuer à sélectionner jusqu'à ce que votre taille d'ensemble est assez grand ... (ne pas oublier une sorte de vérification de la condition de bord où il n'y a pas suffisamment de nombres dans le vecteur source pour fournir le nombre configuré de valeurs aléatoires)

Questions connexes