Java: portée d'une variable
Répondre à la discussion
Affichage des résultats 1 à 14 sur 14

Java: portée d'une variable



  1. #1
    banzkura

    Question Java: portée d'une variable


    ------

    Bonjour,

    Je suis en train de développer un programme mais soudainement j'ai un doute...
    Voici la portion de code concernée:
    Ma question est:
    Ici j'initialise indice à 0 avant la boucle for. Cependant j'ai peur que l'affectation indice = i soit une "affectation locale et que mon return me retourne
    la valeur 0 sans prendre en compte ce qui ce passe dans la boucle.
    Qu'en pensez vous?

    Merci pour votre aide.

    int indice = 0;
    for(int i = 0; i < stops.length; i++){
    if( (stop.name()).equals( ((Stop) stops[i]).name()) ){
    indice = i;
    }
    else{
    return ...
    }
    }

    return indice;

    -----

  2. #2
    Arzhur

    Re : Java: portée d'une variable

    Bonjour,

    la déclaration est en dehors de ta boucle for (les balises CODE c'est bien, mangez-en)...ça à l'air d'être bon. As-tu tenté d'exécuter ton programme ?

  3. #3
    Lechero

    Re : Java: portée d'une variable

    Dans ton else tu fais un return, donc si pour i=0 la condition de ton if n'est pas respectée, il sort du for directement, et ton indice vaudra toujours 0.
    A vaincre sans péril, on triomphe sans gloire (Corneille).

  4. #4
    Chanur

    Re : Java: portée d'une variable

    La notion d"affectation locale" n'existe pas.
    C'est une variable qui a une certaine portée, et toute modification, toute lecture de cette variable ne peut se faire que dans cette portée.
    Par contre, il est possible d'avoir deux variables portant le même nom :
    Code:
    int i=1; // première variable
    
    {
    int i=2; // deuxième variable, dont la portée est le bloc dans lequel elle est déclarée
    printf ("%d\n", i); // affichera 2
    } // fin du bloc
    
    // ici, la deuxième variable n'est plus visible
    printf ("%d\n", i); // affichera 1
    L'exemple que j'ai donné est en langage C. Si mes souvenirs sont bons, ça marche de la même façon en Java.
    Evidemment, c'est une TRES mauvaise idée de donner le même nom à deux variables ...

    Dans ton exemple, le problème ne se pose pas, puisque tu n'a qu'une seule déclaration de la variable indice.
    Suis les conseils de Lechero et d'Arzhur ...
    Dernière modification par Chanur ; 18/03/2014 à 06h19.
    Ce qui se conçoit bien s'énonce clairement ; et les mots pour le dire arrivent aisément.

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

    Re : Java: portée d'une variable

    Bonjour,

    Si mes souvenirs sont bons, ça marche de la même façon en Java.
    Par contre en Java j'ai plutôt un gros doute et après vérif ça ne fonctionne pas : j’obtiens bien une erreur du type "Duplicate local variable".

  7. #6
    Bluedeep

    Re : Java: portée d'une variable

    Citation Envoyé par Chanur Voir le message
    La notion d"affectation locale" n'existe pas.
    C'est une variable qui a une certaine portée, et toute modification, toute lecture de cette variable ne peut se faire que dans cette portée.
    Par contre, il est possible d'avoir deux variables portant le même nom :

    L'exemple que j'ai donné est en langage C. Si mes souvenirs sont bons, ça marche de la même façon en Java..
    Autant qu'il m'en souvienne, en Java et en C#, on peut avoir une variable membre de la classe et une variable locale avec le même nom, mais pas deux variables locales (même isolée dans un bloc) de même nom dans la même méthode. La comparaison avec C est de toute manière peu adaptée car le concept de variable globale à un fichier n'existe qu'en C (notion inconnue de C# et Java, qui sont "full OO", et ou la portée maxi est la classe).

    Evidemment, c'est une TRES mauvaise idée de donner le même nom à deux variables ...
    .
    Quelque peu, oui

  8. #7
    bisou10

    Re : Java: portée d'une variable

    le fameux static en C et en C# qui sont de vrais faux-amis

  9. #8
    Bluedeep

    Re : Java: portée d'une variable

    Citation Envoyé par bisou10 Voir le message
    le fameux static en C et en C# qui sont de vrais faux-amis
    Attention : même avec l'attribut static, en C# la variable reste dans la portée "syntaxique" de la classe. (en se rappelant que l'ordre séquentiel d'initialisation des variables static suit l'ordre inverse de la hiérarchie de classe : question piégeuse qui coince un candidat sur deux en entretien )

    Et en effet, rien à voir ni de prés ni de loin avec le staticen C.

  10. #9
    bisou10

    Re : Java: portée d'une variable

    Intéressant la question-piège !

  11. #10
    Chanur

    Re : Java: portée d'une variable

    Citation Envoyé par Bluedeep Voir le message
    Autant qu'il m'en souvienne, en Java et en C#, on peut avoir une variable membre de la classe et une variable locale avec le même nom, mais pas deux variables locales (même isolée dans un bloc) de même nom dans la même méthode. La comparaison avec C est de toute manière peu adaptée car le concept de variable globale à un fichier n'existe qu'en C (notion inconnue de C# et Java, qui sont "full OO", et ou la portée maxi est la classe).
    Je voulais parler de variables locales. Je n'ai pas été clair : dans mon esprit le bout de code que je montrais était à l'intérieur d'une fonction.

    Et si, on peut parfaitement avoir une variable locale masquée par une autre de même nom et de portée plus restreinte (en C et en C++). Pour le coup, je suis formel : ce code se compile sans warning (avec gcc et l'option -Wall) :
    Code:
    #include <stdio.h>
    int main ()
    {
            int i = 1;
            printf ("1. %d\n", i);
    
    
            {
                    int i=2;
                    printf ("2. %d\n", i);
            }
    
    
            printf ("3. %d\n", i);
    
    
            return 0;
    }
    et donne comme résultat :
    Code:
    1. 1
    2. 2
    3. 1
    [EDIT] Je viens de vérifier, ça marche aussi (toujours sans warning) avec en plus une variable globale i, masquée par la variable locale.
    Dernière modification par Chanur ; 19/03/2014 à 03h25.
    Ce qui se conçoit bien s'énonce clairement ; et les mots pour le dire arrivent aisément.

  12. #11
    Bluedeep

    Re : Java: portée d'une variable

    Citation Envoyé par Chanur Voir le message
    Et si, on peut parfaitement avoir une variable locale masquée par une autre de même nom et de portée plus restreinte (en C et en C++).
    [EDIT] Je viens de vérifier, ça marche aussi (toujours sans warning) avec en plus une variable globale i, masquée par la variable locale.
    Euh ... oui ... mais personne n'a jamais dit le contraire.

  13. #12
    Chanur

    Re : Java: portée d'une variable

    Citation Envoyé par Bluedeep Voir le message
    mais pas deux variables locales (même isolée dans un bloc) de même nom dans la même méthode.
    Citation Envoyé par Bluedeep Voir le message
    Euh ... oui ... mais personne n'a jamais dit le contraire.
    Alors c'est moi qui ai mal compris ...
    Ce qui se conçoit bien s'énonce clairement ; et les mots pour le dire arrivent aisément.

  14. #13
    Bluedeep

    Re : Java: portée d'une variable

    Citation Envoyé par Chanur Voir le message
    Alors c'est moi qui ai mal compris ...
    Ma première phrase était exprimée dans le contexte Java et C#, pas dans le contexte C :

    en Java et en C#, on peut avoir une variable membre de la classe et une variable locale avec le même nom, mais pas deux variables locales (même isolée dans un bloc) de même nom dans la même méthode

  15. #14
    Chanur

    Re : Java: portée d'une variable

    Donc c'est effectivement moi qui avait mal lu et mal compris.
    Désolé
    Ce qui se conçoit bien s'énonce clairement ; et les mots pour le dire arrivent aisément.

Discussions similaires

  1. variable d'instance et variable de classe (java)
    Par narakphysics dans le forum Programmation et langages, Algorithmique
    Réponses: 1
    Dernier message: 24/04/2012, 22h05
  2. comment déterminer une densité d'une variable qui est en fonction d'une autre variable
    Par invite1e252b6d dans le forum Mathématiques du supérieur
    Réponses: 0
    Dernier message: 11/09/2010, 20h30
  3. Statistiques : lien entre variable binaire et variable continue
    Par invitecf228342 dans le forum Mathématiques du supérieur
    Réponses: 17
    Dernier message: 10/02/2010, 20h34
  4. Affichage variable d'une classe java dans une page web
    Par invitee5fedd72 dans le forum Logiciel - Software - Open Source
    Réponses: 12
    Dernier message: 01/06/2009, 21h14
  5. Java, java, java, where are you, there's a mission for you !
    Par invite1237a629 dans le forum Logiciel - Software - Open Source
    Réponses: 35
    Dernier message: 16/03/2008, 22h10