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

Collection et Stream Java Discussion :

Passage de tableau en argument


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mai 2006
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 47
    Par défaut Passage de tableau en argument
    Bonjour je viens vers ou car j'ai un petit souci au niveau des pointeurs java (qui sont gerer par java et non par nous)

    Voici le code deja:

    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
    54
    55
    56
    57
    import java.util.Random;
    import java.util.Scanner;
     
    public class JeuDeLaVie {
     
     
        public static int x,y;
     
     
        public static void init(boolean[][] etat1,boolean[][] etat2){
            Scanner sc = new Scanner(System.in);
     
            //Creation des tableaux et initialisation a false
            do
            {
                System.out.println("entrer la dimension x");
                x= sc.nextInt();
                System.out.println("entrer la dimension y");
                y= sc.nextInt();
            }while(x<=0 && y <=0);
            etat1 = new boolean[x][y];
            etat2 = new boolean[x][y];
     
     
            //creation des cellules dans la 1ere matrice
            int nbCellule;
            do
            {
                System.out.printf("entrer le nombre de cellule au depart entre 1 et %d:\n", x*y);
                nbCellule= sc.nextInt();
            }while(nbCellule<1 || nbCellule> (x*y));
     
            int i=1;
            Random r = new Random();
            while(i<=nbCellule){
                int cx = r.nextInt(x);
                int cy = r.nextInt(y);
                if(etat1[cy][cx] == false){
                    etat1[cy][cx] = true;
                    i++;
                }
            }
     
        }
     
        public static void main(String[] args) {
            boolean etat1[][] = null;
            boolean etat2[][] = null;
     
            init(etat1, etat2);
            System.out.println("test");
            System.out.println(etat1[0][0]);
            //affiche(etat1);
     
        }
     
    }



    J'ai deux tableaux dans le main, que je veux créer et initialiser dans la fonction init(). Dans la fonction init mes deux tableaux sont bien creer et initialiser. Mais quand on revient au main a la fin de la fonction mais tableaux sont de nouveau a null...
    Pourriez vous m'expliquer pourquoi ? et si c'est possible de résoudre le probleme ?

    cordialement

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    pourquoi -> parce que les paramètres de méthode en java sont toujours passés par valeur
    comment résoudre -> toutes les valeurs que tu dois retourner à l'appelant sont à mettre dans le return.

    Donc dans ton cas , créer une classe EtatDuJeu, contenant les deux tableau et retourner un instance de cette classe.

  3. #3
    Membre averti
    Inscrit en
    Mai 2006
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 47
    Par défaut
    D'accord, merci beaucoup pour la réponse

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Parce que

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    boolean etat1[][] = null;
    boolean etat2[][] = null;
    init(etat1, etat2);
    est exactement la même chose que :

    En Java on ne passe pas des variables en paramètre. On ne passe que des expressions. Dans le cas présent tu n'as pas passé etat1 et etat2, mais les valeurs de etat1 et etat2, qui valent toutes les deux null.

    Comme tu n'as pas passé les variables, tu ne peux pas modifier ces variables.
    Quand tu modifies les valeurs des paramètres dans init(), rien ne t'empêche de le faire mais c'est inutile : ça ne concerne pas main(). init() a juste changé les valeurs de ses paramètres, qui ne concernent que elle.

    Pour faire ce genre de choses, on utilise des variables de classe, pas des variables locales. Comme ça, main() et init() manipulent les mêmes variables, et quand il y en a une qui les modifie, ça concerne l'autre aussi.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

Discussions similaires

  1. passage d'un tableau comme argument d'une fonction
    Par arwen76 dans le forum Langage
    Réponses: 8
    Dernier message: 06/02/2015, 09h58
  2. Réponses: 2
    Dernier message: 15/08/2014, 22h39
  3. Passage d'un tableau en argument d'une fonction d'une dll
    Par _LBS_ dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 16/02/2010, 18h26
  4. passage d'un tableau en argument dans une procédure
    Par cati_78 dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 23/11/2008, 18h11
  5. Réponses: 2
    Dernier message: 14/05/2007, 14h38

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