Générer un nombre aléatoire différents des nombres existants
Résolu
neocol
Messages postés
69
Statut
Membre
-
neocol Messages postés 69 Statut Membre -
neocol Messages postés 69 Statut Membre -
Bonjour,
J'ai un tableau de int de taille 10 (ces éléments sont bornés entre 1 et 10) . Dans ce tableaux il y a les valeurs 2, 5 , 7
Je veux créer un nombre entier aléatoire entre 1 et 10 mais il doit être différent des éléments qui existe déjà dans le tableau (ça veut dire que le nombre généré doit être soit 1 ou 3 ou 4 ou 6 ou 8 ou 9 ou 10) .
J'ai la formule pour créer un nombre aléatoire, il me reste une idée pour faire la condition :
int higher = 10, lower = 1;
int random = (int)(Math.random() * (higher-lower)) + lower;
Vous avez des idées ? merci
J'ai un tableau de int de taille 10 (ces éléments sont bornés entre 1 et 10) . Dans ce tableaux il y a les valeurs 2, 5 , 7
Je veux créer un nombre entier aléatoire entre 1 et 10 mais il doit être différent des éléments qui existe déjà dans le tableau (ça veut dire que le nombre généré doit être soit 1 ou 3 ou 4 ou 6 ou 8 ou 9 ou 10) .
J'ai la formule pour créer un nombre aléatoire, il me reste une idée pour faire la condition :
int higher = 10, lower = 1;
int random = (int)(Math.random() * (higher-lower)) + lower;
Vous avez des idées ? merci
A voir également:
- Générer un nombre aléatoire différents des nombres existants
- Nombre de jours entre deux dates excel - Guide
- Nombre facile - Télécharger - Outils professionnels
- Code binaire des nombres - Guide
- Ascii nombre de caractères - Guide
- Comment générer un qr code - Guide
3 réponses
Bonjour,
Normalement ça marche !
public class un {
public static void main(String[] args)
{
int taille;
int array[] = {0,2,5,7,11};
taille = (array.length);
int tab[] = new int[taille];
for(int i = 0; i < taille-1; i++)
{
int higher = array[i+1], lower = array[i]+1;
int random = (int)(Math.random() * (higher-lower)) + lower;
tab[i]= random;
}
int nbAlea = (int)(Math.random()*taille);
int resultat = tab[nbAlea];
if (resultat == 0) resultat++;
System.out.println(resultat);
}
}
Normalement ça marche !
Bonjour,
Tu peux utiliser un Set en parallèle de ton tableau. Quand tu utilises la méthode add, ça renvoie true si l'ensemble a été modifié ou false si la valeur ajoutée existait déjà.
Exemple : je rempli aléatoirement un tableau avec des valeurs différentes.
Remarque : pour éviter le passage inutile vers un nombre aléatoire double pour le repasser en int avec ta formule
Tu peux utiliser un Set en parallèle de ton tableau. Quand tu utilises la méthode add, ça renvoie true si l'ensemble a été modifié ou false si la valeur ajoutée existait déjà.
Exemple : je rempli aléatoirement un tableau avec des valeurs différentes.
public static void main(String...args) { int lower = 1, higher = 10; int[] tab = new int[5]; HashSet<Integer> set = new HashSet<Integer>(tab.length); for (int i = 0; i < tab.length; i++ ) { int random; do { random = (int) (Math.random() * (higher - lower)) + lower; } while ( !set.add(random)); tab[i] = random; } System.out.println(Arrays.toString(tab)); }
Remarque : pour éviter le passage inutile vers un nombre aléatoire double pour le repasser en int avec ta formule
(int) (Math.random() * (higher - lower)) + lower;on peut générer directement des entiers aléatoires avec la classe Random.
private static final Random RANDOM = new Random(); int random = RANDOM.nextInt(higher-lower) + lower;
Bonjour,
Je vous remercie pour votre aide précieux, je vous laisse ce que j'ai fait et ça marche pour moi.
package sdfsdf;
/**
* @author Youness Mourtaji
*
*/
public class un {
public static void main(String[] args)
{
String [] delivriesReferences = {"v1.1","v1.20","v1.30","v1.56","v1.123","v1.147","v1.201","v1.253"};
String random = myVersion(1,260);
System.out.println("random : " + random);
}
public static String myVersion(int lower, int higher) {
int random = (int)(Math.random() * (higher-lower)) + lower;
int i=0;
String version = null;
version = toString1(random);
String [] delivriesReferences = {"v1.1","v1.20","v1.30","v1.56","v1.123","v1.147","v1.201","v1.253"};
int taille = delivriesReferences.length;
for(int j=0; j<taille; j++)
{
if (version==delivriesReferences[j])
{
int max = Integer.valueOf(delivriesReferences[j+1]).intValue();
int min = Integer.valueOf(delivriesReferences[j]+1).intValue();
random = (int)(Math.random() * (max-min)) + min;
version = toString1(random);
}
}
return version;
}
//méthode de concaténation des chaines de caractéres
public static String toString1(int version)
{
final StringBuilder builder = new StringBuilder();
builder.append("v1.").append(version);
return builder.toString();
}
}
Je vous remercie pour votre aide précieux, je vous laisse ce que j'ai fait et ça marche pour moi.
package sdfsdf;
/**
* @author Youness Mourtaji
*
*/
public class un {
public static void main(String[] args)
{
String [] delivriesReferences = {"v1.1","v1.20","v1.30","v1.56","v1.123","v1.147","v1.201","v1.253"};
String random = myVersion(1,260);
System.out.println("random : " + random);
}
public static String myVersion(int lower, int higher) {
int random = (int)(Math.random() * (higher-lower)) + lower;
int i=0;
String version = null;
version = toString1(random);
String [] delivriesReferences = {"v1.1","v1.20","v1.30","v1.56","v1.123","v1.147","v1.201","v1.253"};
int taille = delivriesReferences.length;
for(int j=0; j<taille; j++)
{
if (version==delivriesReferences[j])
{
int max = Integer.valueOf(delivriesReferences[j+1]).intValue();
int min = Integer.valueOf(delivriesReferences[j]+1).intValue();
random = (int)(Math.random() * (max-min)) + min;
version = toString1(random);
}
}
return version;
}
//méthode de concaténation des chaines de caractéres
public static String toString1(int version)
{
final StringBuilder builder = new StringBuilder();
builder.append("v1.").append(version);
return builder.toString();
}
}