Rechercher : dans
Par :

[Java] Choix aléatoire de nombre

Dernière réponse le 1 mai 2007 à 09:59:19 Steeve, le 1 mai 2007 à 01:12:04 
 Signaler ce message aux modérateurs

Probleme programmation Java
Bjr tout le monde, je suis un débutant en programmation...et je dois faire un programme pour gerer un parking.Dans mon programme principal j'ai un vecteur de voiture : [8]vo; j'aimerais qu'il choissise aléatoirement une voiture du vecteur pour lui appliquer certaines méthodes...j'ai pensé à utliser un Utilitaires.aléa(8) mais il est possible qu'il tire deux fois le même nombre, ce qui pour la suite est très très gênant.Comment éliminer ce risque...

Merci d'avance

PS: je sais que je ne suis pas très claire donc n'hésitez pas à me demander des précisions.

Configuration: Windows XP
Firefox 1.5.0.11

Meilleures réponses pour « [Java] Choix aléatoire de nombre » dans :
Générer des nombres aléatoires efficacement avec rand() Voir Générer des nombres aléatoires efficacement avec rand() Vous avez peut-être remarqué qu'en C, en utilisant la fonction rand() de la bibliothèque standard, vous obtenez des résultats décevants, trop souvent les mêmes. Prenons un exemple, vous...
Javascript - Lien aléatoire / Choisir un lien au hasard VoirLe script ci-dessous permet de créer un lien hypertexte dirigeant le visiteur vers une adresse choisie au hasard dans une liste. Le code ci-dessous est à insérer entre les balises et en début de page :
Télécharger The Hat VoirDans la vie on doit toujours faire des choix. Pour l'organisation du ménage, les parents ont parfois du mal à désigner qui fera quoi tel jour. The Hat est tout simplement un programme qui permet de faire un choix aléatoire et entre plusieurs noms. Il...
Télécharger ICarbon VoirVous avez un PC avec scanner et imprimante ? Alors iCarbon transforme le tout en photocopieuse. Le logiciel est très simple: Un seul gros bouton bleu à presser pour copier un document. Vous pouvez malgré tout choisir le nombre de copies, la...
Télécharger GVAO VoirGVAO est un logiciel de gestion commerciale, permettant de gérer Devis, factures, Clients, Fournisseurs, Articles et Stocks. Fonctionnalités Gestion des clients Gestion des fournisseurs Gestion, inventaire du stock Choix du nombre de...

1

 HackTrack, le 1 mai 2007 à 09:59:19

Salut!

Tu trouveras ci-dessous une classe qui étend Vector. Elle contient deux méthodes supplémentaires qui te permettent de réaliser ce que tu as demandé.

Regarde dans la doc du code (en début de classe) pour plus d'infos.

J'ai volontairement utilisé unautre Vector interne à la classe pour stocker les éléménts qui n'ont pas encore été retourné par la méthode getRandomElement(). Cette solution n'est pas la meilleure car on utilise ici l'espace méméoire nécessaire à 2 Vector pour en uitiliser finalement un seul.

Je te laisse adapter le code en utilisant, par exemple, un boolean[] pour stocker si oui ou non un élément à déjà été renvoyé.

;-)

import java.util.Collection;
import java.util.Vector;

import org.omg.CORBA.portable.RemarshalException;

/**
 * Created on 01-mai-07
 * 
 * Description: Cette classe étend la classe Vector.
 * Elle contient deux méthodes supplémentaires:
 * <ul>
 * <li>getRandomElement() qui retourne aléatoirement un objet de type E qui
 * appartient au vecteur sans jamais renvoyer deux fois le même objet</li>
 * <li>resetRandom() qui permet de réinitialiser le retoru aléatoire d'un
 * élément du vecteur
 * </ul>
 * 
 * @author: HackTrack for CCM
 */

public class RandomGetVector<E extends Object> extends Vector<E> {
	private Vector<E> remainingObjects;

	private static final long serialVersionUID = -6047874282826032292L;

	public RandomGetVector() {
		remainingObjects = new Vector<E>();
	}

	public RandomGetVector(int initialCapacity) {
		super(initialCapacity);
		remainingObjects = new Vector<E>(initialCapacity);
	}

	public RandomGetVector(Collection<E> c) {
		super(c);
		remainingObjects = new Vector<E>(c);
	}

	public RandomGetVector(int initialCapacity, int capacityIncrement) {
		super(initialCapacity, capacityIncrement);
		remainingObjects = new Vector<E>(initialCapacity, capacityIncrement);
	}

	public boolean add(E o) {
		if (remainingObjects.add(o))
			return super.add(o);
		return false;
	}

	public void add(int i, E o) {
		super.add(i, o);
		remainingObjects.add(i, o);

	}

	public void addAll(Collection<E> c) {
		super.addAll(c);
		remainingObjects.addAll(c);
	}

	public void addAll(int i, Collection<E> c) {
		super.addAll(i, c);
		remainingObjects.addAll(i, c);
	}

	/**
	 * Returns in a random way an element of the <code>RandomGetVector
.
* The same element is returned once and only once while the
*
RandomGetVector#resetRandom
method hasn'been called.
*
* @return A random element which belongs to the
*
RandomGetVector

* @throws ArrayIndexOutOfBoundsException
* If all element have already been returned.
*/
public E getRandomElement() throws ArrayIndexOutOfBoundsException {
int randomIndex = (int) (Math.random() * remainingObjects.size());
return remainingObjects.remove(randomIndex);
}

/**
* Resets the random. Any element of the
RandomGetVector
may
* been returned after call to this method.
*
*/
public void resetRandom() {
remainingObjects = new Vector<E>();
remainingObjects.addAll(this);
}

public static void main(String[] args) {
RandomGetVector<String> vector = new RandomGetVector<String>();
vector.add("Hack");
vector.add("Track");
vector.add("CCM");
vector.add("Java");
for (int i = 0; i < 5; i++) {
System.out.println(vector.getRandomElement());
}
}
}

</code>

;-)
HackTrack

Répondre à HackTrack
Collection CommentÇaMarche.net