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;
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); } }
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;
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();
}
}