IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

avec Java Discussion :

Remplir aléatoirement les cases d'un tableaux à 2 dimensions.


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2020
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2020
    Messages : 39
    Par défaut Remplir aléatoirement les cases d'un tableaux à 2 dimensions.
    Bonjour à tous,
    comment intitulé dans le titre, j'aimerais savoir comment on fait pour remplir un tableau à 2 dimensions par une certain valeur? (moi je voudrais "*" par exemple) pour illustrer mon propos voici ce que je veux faire, pour un n donner, par exemple 32, et un tableau de tableau d'entier en 10 x 10, on va placer 32 fois "*" aléatoirement dans la tableau

  2. #2
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 769
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 769
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    public class Array {
        final static int nb_rows   = 10;
        final static int nb_cols   = 10;
        final static int nb_values = 12;
     
        public static void main(String[] args) {
            int[][] array;
            int i, j, count;
     
            array = new int[nb_cols][nb_cols]; // 0-initialization
     
            count = 0;
     
            do {
                i = (int) (Math.random() * nb_rows);
                j = (int) (Math.random() * nb_cols);
     
                if (array[i][j] == 0) {
                    array[i][j] = -1;
     
                    count++;
                }
            } while(count < nb_values);
     
     
    //      Display array
            for (i=0; i < nb_rows; i++) {
                for (j=0; j < nb_cols; j++) {
                    if (array[i][j] >= 0) {
                        System.out.print(" " + array[i][j] + " ");
                    } else {
                        System.out.print(array[i][j] + " ");
                    }
                }
                System.out.println();
            }
            System.out.println();
         }
    }
    Édit : C'est l'algo brute force , et je soupçonne qu'il faut que nb_values << nb_total, que le nombre de cases à trouver (ici 12) soit très petit par rapport au nombre total de cases possibles (ici, 10x10 = 100).
    Sinon cet algo risque de tourner 1 certain temps pour trouver "un trou"

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2020
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2020
    Messages : 39
    Par défaut
    Ouah ça l'air pas mal en vrai, merci ! juste, est ce que tu peux m'expliquer le passage là s'il te plait?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    i = (int) (Math.random() * nb_rows);
     j = (int) (Math.random() * nb_cols);

  4. #4
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 769
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 769
    Par défaut
    C'est 1 passage assez critiqué

    Comme Math.random() va te retourner 1 nombre entre 0.0 et 1.0 ( [0.0, 1.0[ ), alors la formule est (min + Math.random() * (max - min)).
    C'est 1 règle de 3 (qui maintenant est interdite à l'école ) avec 1 translation de min
    • 0.0 -> 0
    • X -> ?
    • 1.0 -> (max - min)

    Ici X est fourni par Math.random(). Et donc X * (max - min) = 1 * valeur ou X * 0 = 0 * valeur (<- LOL )

    Pour ton cas, min vaut 0 (c'est l'indice le + petit) et max est soit le nombre de lignes soit le nombre de colonnes.


    Ce passage est critiqué parce qu'apparemment, il ne génère pas les nombres de façon uniforme. Mais je pense que c'est + 1 problème de fonction basique (qui n'utilise pas d'entropie par exemple)

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2020
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2020
    Messages : 39
    Par défaut
    OKkk merci beaucoup de l'explication j'ai compris !

  6. #6
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 769
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 769
    Par défaut
    Est qu'il y a 1 différence entre tab (ligne 4) et Tab (ligne 11, 12, 18 et 19) ?
    Quelle est le code de la fonction entierAleatoire ?


    Ce code fonctionne
    * -> Ensuite mettre + 1 dans le calcul et passer le paramètre (max - 1) ne change rien, mais c'est perturbant parce que le maximum n'est plus le maximum à proprement dit.
    Ce qui est bizarre , c'est si ton minimum est 1, tu ne devrais avoir aucune valeur ni sur la première ligne ni sur la première colonne.
    Comme je l'ai dit, la fonction Math.random() est vraiment très basique. Peut-être utiliser la classe Random qui utilise au moins 1 graine
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    public class Array {
        final static int nb_rows   = 10;
        final static int nb_cols   = 10;
        final static int nb_values = 12;
     
     
        public static int get_one_number(int min, int max) {
            return (int) Math.floor(Math.random() * (max - min)) + min;
        }
     
     
        public static void main(String[] args) {
            int[][] array;
            int i, j, count;
     
            array = new int[nb_cols][nb_cols]; // 0-initialization
     
            count = 0;
     
            do {
                i = get_one_number(0, nb_rows);
                j = get_one_number(0, nb_cols);
     
                if (array[i][j] == 0) {
                    array[i][j] = -1;
     
                    count++;
                }
            } while(count < nb_values);
     
     
    //      Display array
            for (i=0; i < nb_rows; i++) {
                for (j=0; j < nb_cols; j++) {
                    if (array[i][j] >= 0) {
                        System.out.print(" " + array[i][j] + " ");
                    } else {
                        System.out.print(array[i][j] + " ");
                    }
                }
                System.out.println();
            }
            System.out.println();
        }
    }

    Édit : @antares56 a supprimé des messages , notamment celui avec le code de sa fonction entierAleatoire (en supprimant le +1, *)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        public static int entierAleatoire(int min, int max) {
            return ThreadLocalRandom.current().nextInt(min, max);
        }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Supprimer les doublons de deux tableaux à deux dimensions
    Par mitsukk1992 dans le forum Langage
    Réponses: 2
    Dernier message: 15/12/2017, 18h11
  2. les cases vides dans tableaux
    Par ghosty04 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 04/12/2008, 19h05
  3. la racine carrée et les cases tableaux
    Par fadelghani dans le forum Mathématiques
    Réponses: 18
    Dernier message: 13/09/2008, 19h16
  4. Réponses: 2
    Dernier message: 27/07/2007, 18h37
  5. Réponses: 7
    Dernier message: 14/02/2006, 16h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo