Répondre à la discussion
Affichage des résultats 1 à 6 sur 6

JAVA, problème de compréhension "static" et "affectation"



  1. #1
    oignon57

    JAVA, problème de compréhension "static" et "affectation"


    ------

    Bonjour à toutes et à tous !

    Je suis en train d'apprendre la programmation avec JAVA et j'ai rencontré quelques difficultés de compréhension.
    Pouvez vous m'aider ?

    Code PHP:
    public class tt {
        
        private static 
    void change(int aint b) {
            
    a=b;
            
    b=53;
            }

        public static 
    void main(String[] args) {
            
    int i,j;
            
    6;
            
    7;
            
    change(i,j);
            
    System.out.println(i+" "+j);
        }


    1) A la base dans la méthode "change", je ne l'avais pas défini en tant que "Static". Pourquoi dois je la définir ainsi ?
    Je sais que qu'une méthode statique est une méthode qui peut être utilisé sans avoir besoin d'instancier un objet (ici, il n'y a pas d'objet car pas de "new" et de constructeur) et je constate que la méthode méthode Main est aussi Static.
    Mais je ne comprend pas.
    Pour moi, la méthode "change" correspond à une simple fonction qui prend des paramètres, je ne vois pas l'intérêt de la mettre en static.
    Est ce que cela veut dire que je dois définir static à chaque méthode qui ne s'applique pas sur un objet ?

    2) J'ai une erreur dans ce code.
    A priori, je pensais que cela afficherait i=7 et b=53. Il est affiché : i=6 et j=7.
    Pourquoi ?
    Je ne pense pas que ce soit à cause du private car elles appartiennent à la même classe "tt".
    C'est comme si les affectations ne fonctionnaient pas.

    3) Mon dernier problème est aussi lié à l'affectation. Le code fonctionne mais cela me parait illogique.

    Code PHP:
    public class {

        public static 
    void affiche(double[] t) {
               for(
    int i =0i<t.lengthi++){
                    
    System.out.print(t[i]+" ");
                }
                   
    System.out.println();
        }
        public static 
    void init(double[] tab) {
        
    tab[0]=2.5;
        
    tab[1]=-1.235;
        }

        public static 
    void main(String[] args) {

            
    double[] t1,t2;
            
    t1=new double[2];
            
    init(t1);
            
    affiche(t1);
            
    t1[0]=3.14159;
            
    affiche(t1);
            
    init(t1);
            
    t2=new double[2];
            
    t2=t1;
            
    affiche(t2);
            
    t1[0]=3.14159;
            
    affiche(t2);

        }


    Le résultat est:
    Code PHP:
    2.5 -1.235 
    3.14159 
    -1.235 
    2.5 
    -1.235 
    3.14159 
    -1.235 
    La dernière affectation est incohérente, non ?
    "affiche(t2);" devrait donner: 2.5 -1.235.
    t2[0] n'a jamais été affecté à 3.14159, donc il y a t-il une erreur?

    Je crois qu'un concept m'échapper, merci de votre aide.

    -----

  2. Publicité
  3. #2
    photon57

    Re : JAVA, problème de compréhension "static" et "affectation"

    Citation Envoyé par oignon57 Voir le message
    Bonjour à toutes et à tous !

    Je suis en train d'apprendre la programmation avec JAVA et j'ai rencontré quelques difficultés de compréhension.
    Pouvez vous m'aider ?
    Hello,
    je vais essayer

    Citation Envoyé par oignon57 Voir le message
    Code PHP:
    public class tt {
        
        private static 
    void change(int aint b) {
            
    a=b;
            
    b=53;
            }

        public static 
    void main(String[] args) {
            
    int i,j;
            
    6;
            
    7;
            
    change(i,j);
            
    System.out.println(i+" "+j);
        }


    1) A la base dans la méthode "change", je ne l'avais pas défini en tant que "Static". Pourquoi dois je la définir ainsi ?
    Je sais que qu'une méthode statique est une méthode qui peut être utilisé sans avoir besoin d'instancier un objet (ici, il n'y a pas d'objet car pas de "new" et de constructeur) et je constate que la méthode méthode Main est aussi Static.
    Mais je ne comprend pas.
    Pour moi, la méthode "change" correspond à une simple fonction qui prend des paramètres, je ne vois pas l'intérêt de la mettre en static.
    Est ce que cela veut dire que je dois définir static à chaque méthode qui ne s'applique pas sur un objet ?
    En java il n'y a pas de simples fonctions.
    Effectivement, si tu veux écrire en Java comme tu le ferais en C par exemple, tu es obligé d'utiliser des méthodes de classes = static.

    Citation Envoyé par oignon57 Voir le message
    2) J'ai une erreur dans ce code.
    A priori, je pensais que cela afficherait i=7 et b=53. Il est affiché : i=6 et j=7.
    Pourquoi ?
    Je ne pense pas que ce soit à cause du private car elles appartiennent à la même classe "tt".
    C'est comme si les affectations ne fonctionnaient pas.
    Tes paramètres sont passés par copie et non par référence ; ce n'est pas une erreur, c'est une caractéristique de Java.

    Citation Envoyé par oignon57 Voir le message
    3) Mon dernier problème est aussi lié à l'affectation. Le code fonctionne mais cela me parait illogique.

    Code PHP:
    public class {

        public static 
    void affiche(double[] t) {
               for(
    int i =0i<t.lengthi++){
                    
    System.out.print(t[i]+" ");
                }
                   
    System.out.println();
        }
        public static 
    void init(double[] tab) {
        
    tab[0]=2.5;
        
    tab[1]=-1.235;
        }

        public static 
    void main(String[] args) {

            
    double[] t1,t2;
            
    t1=new double[2];
            
    init(t1);
            
    affiche(t1);
            
    t1[0]=3.14159;
            
    affiche(t1);
            
    init(t1);
            
    t2=new double[2];
            
    t2=t1;
            
    affiche(t2);
            
    t1[0]=3.14159;
            
    affiche(t2);

        }


    Le résultat est:
    Code PHP:
    2.5 -1.235 
    3.14159 
    -1.235 
    2.5 
    -1.235 
    3.14159 
    -1.235 
    La dernière affectation est incohérente, non ?
    "affiche(t2);" devrait donner: 2.5 -1.235.
    t2[0] n'a jamais été affecté à 3.14159, donc il y a t-il une erreur?

    Je crois qu'un concept m'échapper, merci de votre aide.
    Non elle ne l'est pas. Je pense aussi que certains concepts t'échappent car tu ne les as certainement pas vus, tout simplement.
    Quels sont tes lectures pour apprendre Java ? Tu connais un autre langage ?

  4. #3
    oignon57

    Re : JAVA, problème de compréhension "static" et "affectation"

    Bonjour Photon57 et merci de votre aide.

    Tes paramètres sont passés par copie et non par référence ; ce n'est pas une erreur, c'est une caractéristique de Java.
    D'après ce que j'ai pu trouver, le passage par copie s'applique avec les types primitifs (int, double, short...) et concrètement le paramètre effectif passe sa valeur au paramètre formel.

    Les références sont pour les objets et correspondent à l'endroit ou se situe la valeur du paramètre dans la case mémoire que l'on a alloué.


    Si, c'est par copie, cela devrait fonctionner à mon sens, non ? (le i s'applique à a et j à b).
    Si c'est une caractéristique, comment l'exploiter pour que le code fonctionne ?

    Quels sont tes lectures pour apprendre Java ? Tu connais un autre langage ?
    A vrai dire, Java est mon premier langage objet.

    Je pense aussi que certains concepts t'échappent
    Pouvez vous me les expliquer ou me diriger vers des liens qui les expliquent.

    Merci.

  5. #4
    photon57

    Re : JAVA, problème de compréhension "static" et "affectation"

    Le plus simple est de commencer par lire ces références :

    Une introduction à Java : http://www.pps.jussieu.fr/~rifflet/e...AVA/index.html
    Qu'est-ce qu'une variable en Java : http://www.pps.jussieu.fr/~rifflet/e...variables.html
    Comment sont passés les paramètres : http://www.pps.jussieu.fr/~rifflet/enseignements/JAVA/methodes.html

    Je pense qu'avec ça tout te sera un peu plus clair.

    Java est un langage objet. Es-tu familiarisé avec les notions objets ?

    Edit: Questions subsidiaires, as-tu déjà programmé ? As-tu des notions en algorithmique ?
    Dernière modification par photon57 ; 08/10/2011 à 20h06.

  6. A voir en vidéo sur Futura
  7. #5
    oignon57

    Re : JAVA, problème de compréhension "static" et "affectation"

    Bonjour,
    Je viens d'apprendre les bases (Classe, objet, constructeurs, accès privé/publique...).
    Merci pour ces liens, je vais regarder tout ça.

  8. #6
    photon57

    Re : JAVA, problème de compréhension "static" et "affectation"

    Bon courage et bonne lecture

  9. Publicité

Discussions similaires

  1. "fondamentales", "dures", "molles" ... : comment classer les sciences ?
    Par Arvirik dans le forum Epistémologie et Logique (archives)
    Réponses: 13
    Dernier message: 22/04/2017, 22h41
  2. difficultés de compréhension sur les "périodes" glaciaires et "phases" glaciaires.
    Par chat-dock dans le forum Géologie et Catastrophes naturelles
    Réponses: 6
    Dernier message: 13/11/2007, 11h36