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

Problème génération aléatoire en java

akkooo
akkooo
Niveau 10
28 avril 2019 à 15:47:35

Salut j'ai un petit problème que je n'arrive pas à résoudre, je doit faire, en java un programme qui génère de façon aléatoire 6 objets sur une matrice de taille n*m, sauf que le problème c'est que les 6 objets ce génèrent bien mais ils peuvent ce superposer et c'est ça le problème je n'arrive pas en faire en sorte qu'ils aient tous des coordonnée différente

no_lift_69
no_lift_69
Niveau 10
28 avril 2019 à 16:31:59

poste le code

akkooo
akkooo
Niveau 10
28 avril 2019 à 16:52:45

import java.util.Random;

public class Run {
private static Random aleatoire = new Random();

public static void main(String[] args) {
Plateau Monde = new Plateau(12,11);
System.out.println("le nombre de colonne est " + Monde.getM());
System.out.println("Le nombre de ligne est " +Monde.getN());

//création des case qui vont accueillir un objets

Case c1 = new Case(aleatoire.nextInt(Monde.getM()),aleatoire.nextInt(Monde.getN()));
Case c2 = new Case(aleatoire.nextInt(Monde.getM()),aleatoire.nextInt(Monde.getN()));
Case c3 = new Case(aleatoire.nextInt(Monde.getM()),aleatoire.nextInt(Monde.getN()));
Case c4 = new Case(aleatoire.nextInt(Monde.getM()),aleatoire.nextInt(Monde.getN()));
Case c5 = new Case(aleatoire.nextInt(Monde.getM()),aleatoire.nextInt(Monde.getN()));
Case c6 = new Case(aleatoire.nextInt(Monde.getM()),aleatoire.nextInt(Monde.getN()));

//attribution des cases aux objets

Obstacle ob1 = new Obstacle(c1.getYcase(),c1.getXcase());
Obstacle ob2 = new Obstacle(c2.getYcase(),c2.getXcase());
Obstacle ob3 = new Obstacle(c3.getYcase(),c3.getXcase());
Obstacle ob4 = new Obstacle(c4.getYcase(),c4.getXcase());
Obstacle ob5 = new Obstacle(c5.getYcase(),c5.getXcase());
Obstacle ob6 = new Obstacle(c6.getYcase(),c6.getXcase());

// affichage de la matrice avec les 6 objets

for(int i = 0; i < Monde.getM(); i++) {
for(int j = 0; j< Monde.getN(); j++) {
if(i== ob1.getXObs() && j == ob1.getYObs() ||
i == ob2.getXObs() && j== ob2.getYObs() ||
i == ob3.getXObs() && j == ob3.getYObs() ||
i == ob4.getXObs() && j == ob4.getYObs() ||
i == ob5.getXObs() && j == ob5.getYObs() ||
i == ob6.getXObs() && j == ob6.getYObs()
) {
System.out.print("OB|");
} else
System.out.print(" |");
}
System.out.print("\n");
}
}
}

[Kakuzu]2
[Kakuzu]2
Niveau 34
28 avril 2019 à 16:58:21

Le premier raisonnement que tu aurais du avoir est la manière naïve : tu génères des objets sur des coordonnées mais tu ne veux pas qu'il y en ait plusieurs sur la même case ? Donc tu vérifies quand tu génères ton objet que la case ne possède pas déjà un objet (simple tant que/if).

Le problème de ce raisonnement est que si tu as beaucoup de cases à remplir en proportion à la carte complète, tu risques de boucler longtemps avant de trouver une case libre.

Une autre solution est par exemple de stocker les cases libres dans un tableau et de s'en servir pour trouver une case libre. Une fois que l'objet est créé tu supprimes cette case de ton tableau.

Message édité le 28 avril 2019 à 16:58:38 par [Kakuzu]2
akkooo
akkooo
Niveau 10
28 avril 2019 à 18:29:51

J'ai déjà eu tous ces resonement sauf que comme tu la dis j'vais me retrouver à faire plein de if avec des conditions énormes ou plein de boucle qui pourraient faire planter le programme en cas de bug

De plus ce programme nous a était demandé dans le cadre d'un tp noté, donc l'optimisation du programme sera vérifié donc il faut que je trouve la solution qui demande la moins de ligne possible
( car par la suite je vais devoir rajouter encore 9 objets de plus )

no_lift_69
no_lift_69
Niveau 10
28 avril 2019 à 18:39:00

quand tu initialise un objet, tu met ses coordonnées dans un tableau, comme ça tu peux check si les coordonnées de l'objet suivant ne sont pas déja présentes dans le tableau

Message édité le 28 avril 2019 à 18:39:29 par no_lift_69
Sous forums
  • Aide à l'achat Mac
  • Internet
  • Macintosh
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware
La vidéo du moment