CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[Java] Générer une array d'entier distinct

quadroctet
quadroctet
Niveau 8
27 mai 2016 à 20:19:43

Hello,

Je programme en amateur sur Java, enfin processing pour être précis et j'aurais besoin de piocher dans une grille (array 2D) plusieurs positions différentes. Je me suis dis que j'allais créer une méthode qui génère des tableaux d'entiers tous distincts. Ensuite je génèrerais deux tableaux d'entiers, un pour la coordonée en x et l'autre pour y.

Quelques exemple pour un cas entre 0 et 3, d'une longueur de 4 mais je voudrais généraliser par la suite, ce sera toujours pour une grille de n par n, trouver n positions distinctes :

{3,1,2,0}
{1,0,3,2}
{2,0,3,1}
...

Voici ce que j'ai déjà mais évidemment il y a un problème puisque je vérifie uniquement l'entier à la position précédente et je ne sais pas comment faire pour vérifier tout les précédents :

int[] generateUniqueIntArray()
{
int size = 4;
int[] valueArray;

valueArray = new int[size];
valueArray[0] = round(random(1, size)) - 1;
valueArray[1] = round(random(1, size)) - 1;

for (int i=1; i < size; i++) {
while (valueArray[i] == valueArray[i-1]) {
valueArray[i] = round(random(1, size)) - 1;
}
}
for (int i=0; i < size; i++) {
print(valueArray[i]);
}
println(" ");
return valueArray;
}

D'avance merci.

fluxies
fluxies
Niveau 17
27 mai 2016 à 20:30:25

Utilises deux arrays dans ta méthode. Un qui enregistre les chiffres que tu as placé, et le final.

À chaque fois que tu veux placer dans le final, tu vérifie que le chiffre n'est pas dans le temporaire, (methode d'array indexOf je crois). Si il est pas dans le temp, tu l'ajoutes dans le final + dans le temp

AlphaCygni
AlphaCygni
Niveau 10
27 mai 2016 à 21:29:28

Le 27 mai 2016 à 20:30:25 fluxies a écrit :
Utilises deux arrays dans ta méthode. Un qui enregistre les chiffres que tu as placé, et le final.

À chaque fois que tu veux placer dans le final, tu vérifie que le chiffre n'est pas dans le temporaire, (methode d'array indexOf je crois). Si il est pas dans le temp, tu l'ajoutes dans le final + dans le temp

Pourquoi deux tableaux ? Ils tous les deux identiques à chaque étape dans ce que tu dis.
De toute façon, il y a un algo bien plus efficace pour faire ça :
https://en.wikipedia.org/wiki/Random_permutation#Knuth_shuffles

quadroctet
quadroctet
Niveau 8
27 mai 2016 à 21:46:11

Super c'est exactement ce qu'il me fallait !!

J'ai trouvé ceci ensuite :
http://stackoverflow.com/questions/6946789/generating-random-permutation-uniformly-in-java

et voilà le résultat :

int[] generateUniqueIntArray ()
{
size = 4;
int[] valueArray = new int[size];
for(int i = 0; i < valueArray.length; i++)
valueArray[i] = i;

for(int i = 0; i < size; i++) {
int ran = i + floor(random(size-i));

int temp = valueArray[i];
valueArray[i] = valueArray[ran];
valueArray[ran] = temp;
}
}

Sous forums
  • Aide à l'achat Mac
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment