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 :

Fonction aleatoire d'une matrice


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    .
    Inscrit en
    Mai 2012
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : .

    Informations forums :
    Inscription : Mai 2012
    Messages : 120
    Par défaut Fonction aleatoire d'une matrice
    Bonjour à tous ,
    Excuser moi si je suis un peu trop "Bavard" c'est juste parce que c'est ici je tire mes solution et mes meilleurs idées
    Bref j'ai un soucis que voici:
    je voudrais écrire une fonction me permettant de modifier au maximum 4 mat[i][j] ("evidamen avec '0'|'1' ) avec mat comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    [1, 0, 0, 0, 1, 1, 1, 0]
    [1, 0, 0, 0, 0, 0, 1, 0]
    [1, 0, 0, 0, 1, 1, 0, 1]
    [1, 0, 0, 1, 1, 1, 1, 1]
    [1, 0, 1, 0, 1, 0, 1, 0]
    [1, 0, 1, 0, 0, 1, 0, 1]
    [1, 0, 0, 0, 1, 0, 1, 1]
    [1, 0, 0, 1, 1, 0, 1, 0]
    je dois avoir la possibilité de modifier soit 1|2|3|4 mat[i][j]
    ceux de façon aleatoire (l'appel de la fonction doit exècuté un cas 1|2|3|4 injection)
    Les idées et les codes serais les bienvenues j'espère vraiment avoir été clair
    Merci à vous

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    la fonction doit :

    1) tirer un nombre aléatoire compris entre 0 et 3 (4 valeurs) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nb=(int)(Math.random()*4);

    2) pour ne pas modifier plusiers fois le meme mat[i[j], on va utiliser un set pour les i et un set pour j, genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set<Integer> idejamodifies=new HashSet<Integer>();
    On est obligé de faire ce genre de contrôle, car si par hasard on modifiait 4 fois le même mat[i][j], on ne ferait aucune modification. pour les autres cas, ce ne serait pas génant de modifier plusieurs fois la même mat[i][j], on aurait juste une modification soit annulée (si on modifie un nombre paire de fois) soit une modification (modifier un nombre impair de fois), seulement on ne pourrait pas compter le nombre de mat[i][j] modifiés, sans introduire un moyen du genre de nos set pour le savoir, donc autant les utiliser pour faire clean ça c'est de la phrase de ouf ))

    3) boucler de 0 inclus à nb exclus,

    tirer 1 nombre aléatoire borné par la taille de ta matrice comme par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    i=(int)(Math.random()*mat.length);
    tant que ce i n'est pas dans le set
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while( idejamodifies.contains(i));
    puis on stocke i dans le set,

    et on fait la même chose pour j (avec un second set et mat[0].length

    4) pour modifier la valeur il suffit de faire :

    puisqu'on veut que des 0 et des 1
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre confirmé
    Homme Profil pro
    .
    Inscrit en
    Mai 2012
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : .

    Informations forums :
    Inscription : Mai 2012
    Messages : 120
    Par défaut
    Citation Envoyé par joel.drigo Voir le message
    Salut,

    la fonction doit :

    1) tirer un nombre aléatoire compris entre 0 et 3 (4 valeurs) :

    4) pour modifier la valeur il suffit de faire :

    puisqu'on veut que des 0 et des 1
    Salut merci a vous
    voici la structuration du code :
    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
    46
    47
    48
    49
    50
     
     
    import java.util.Arrays;
    import java.util.HashSet;
    import java.util.Set;
     
     
    public class H {
     
    	/**
             * @param args
             */
     
    	public static void main(String[] args) {
    		char mat[][]=
    			 {
    					{'1', '0', '0', '0', '1', '0', '1', '1'},
    					{'1', '0', '0', '1', '1', '0', '0', '1'},
    					{'1', '0', '0', '1', '1', '0', '0', '1'},
    					{'1', '0', '0', '1', '1', '1', '0', '1'},
    					{'1', '0', '0', '0', '0', '1', '0', '0'}};
    		int nb;
    		int j,i;
    		nb=(int)(Math.random()*4);
     
    		Set<Integer> idejamodifies=new HashSet<Integer>();
    		for( i=0;i<nb;i++)
    		{
    			i=(int)(Math.random()*mat.length);
    			while( idejamodifies.contains(i))
    			{
    				idejamodifies.add(i);
    			}
    		}
    		for( j=0;j<nb;j++)
    		{
    			j=(int)(Math.random()*mat[0].length);
    			while( idejamodifies.contains(j))
    			{
    				idejamodifies.add(j);
    			}
    		}
    		mat[i][j]=(char) (1-mat[i][j]);
    for(int k=0;k<mat.length;k++)
    {
    	System.out.println(Arrays.toString(mat[k]));
    }
     
    	}
    }
    et voici un l'execution:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    [1, 0, 0, 0, 1, 0, 1, 1]
    [1, 0, 0, 1, 1, 0, 0, 1]
    [1, 0, 0, 1, 1, 0, 0, 1]
    [1, 0, 0, 1, 1, 1, 0, 1]
    [1, 0, ￑, 0, 0, 1, 0, 0]
    on me de faire un cast char sur le code
    et donc cela fait apparaitre un caractère inconnu dans cet exemple c'est mat[5][3]
    Merci encore

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    c'est parce que c'est une matrice de char, et pas de int

    tu avais mis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    [1, 0, 0, 0, 1, 1, 1, 0]
    [1, 0, 0, 0, 0, 0, 1, 0]
    [1, 0, 0, 0, 1, 1, 0, 1]
    [1, 0, 0, 1, 1, 1, 1, 1]
    [1, 0, 1, 0, 1, 0, 1, 0]
    [1, 0, 1, 0, 0, 1, 0, 1]
    [1, 0, 0, 0, 1, 0, 1, 1]
    [1, 0, 0, 1, 1, 0, 1, 0]
    donc j'ai cru que tu avais une matrice d'entier

    donc tu peux faire par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mat[i][j]=mat[i][j]=='0'?'1':'0';
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mat[i][j]=(char)('0'+'1'-mat[i][j])
    ce qui est plutôt tordu et inutilement compliqué
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Membre confirmé
    Homme Profil pro
    .
    Inscrit en
    Mai 2012
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : .

    Informations forums :
    Inscription : Mai 2012
    Messages : 120
    Par défaut
    Citation Envoyé par joel.drigo Voir le message

    donc j'ai cru que tu avais une matrice d'entier

    donc tu peux faire par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mat[i][j]=mat[i][j]=='0'?'1':'0';
    Merci ça marche
    mais ce code modifie apparament un seul caractère ?si tel est le cas comment en modifier plus d'un.
    Merci

  6. #6
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    il y a différentes erreurs dans ton code sinon

    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
    46
    47
    48
    49
    50
    51
    52
    53
     
    import java.util.Arrays;
    import java.util.HashSet;
    import java.util.Set;
     
     
    public class H {
     
    	/**
             * @param args
             */
     
    	public static void main(String[] args) {
    		char mat[][]={
    				    {'1', '0', '0', '0', '1', '0', '1', '1'},
    				    {'1', '0', '0', '1', '1', '0', '0', '1'},
    				    {'1', '0', '0', '1', '1', '0', '0', '1'},
    				    {'1', '0', '0', '1', '1', '1', '0', '1'},
    				    {'1', '0', '0', '0', '0', '1', '0', '0'}};
     
                   if ( mat.length==0 ) {
                       System.out.println("Matrice vide");
                       return; // matrice vide
                   }
     
                    int nb=(int)(Math.random()*4);
     
                    // si la matrice a moins de 4 élements
                    nb=Math.min(mat.length*mat[0].length-1,nb);
     
    		Set<Integer> idejamodifies=new HashSet<Integer>();
    		Set<Integer> jdejamodifies=new HashSet<Integer>(); // il faut un set différent pour les j
                    // on pourrait aussi utiliser un Set unique de java.awt.Point par exemple
     
    		for( int k=0; k<nb; k++) {
        		    int j,i;
                        do {
                            // il faut déterminer les 2 coordonnées en même temps
       			i=(int)(Math.random()*mat.length);
    			j=(int)(Math.random()*mat[0].length);
    		    } while( idejamodifies.contains(i) && jdejamodifiés.contains(j));    // ce sont les deux coordonnées simultanément qu'il faut tester 
                        idejamodifies.add(i);
                        jdejamodifies.add(j);
     
    		    mat[i][j]=mat[i][j]=='0'?'1':'0';
                    }
     
                    for(int k=0;k<mat.length;k++) {
    	             System.out.println(Arrays.toString(mat[k]));
                    }
     
    	}
    }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  7. #7
    Membre confirmé
    Homme Profil pro
    .
    Inscrit en
    Mai 2012
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : .

    Informations forums :
    Inscription : Mai 2012
    Messages : 120
    Par défaut
    Merci je juis satisfaita plus

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

Discussions similaires

  1. [Débutant] comment extraire deux lignes aleatoires d'une matrice?
    Par linda05 dans le forum MATLAB
    Réponses: 5
    Dernier message: 15/05/2014, 19h23
  2. Fonction pour découper une matrice colonne
    Par Redak2010 dans le forum MATLAB
    Réponses: 2
    Dernier message: 22/07/2013, 15h36
  3. Fonction qui retourne une matrice
    Par condor_01 dans le forum C
    Réponses: 7
    Dernier message: 22/10/2007, 13h31
  4. Réponses: 13
    Dernier message: 05/03/2007, 09h29
  5. Passer une matrice comme paramètre d'une fonction
    Par Rniamo dans le forum Langage
    Réponses: 8
    Dernier message: 16/07/2006, 20h55

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