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 :

Variables non initialisées ?


Sujet :

avec Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2009
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 29
    Points : 24
    Points
    24
    Par défaut Variables non initialisées ?
    Voila, je débute en java et je recontre souvent à la compilation des erreurs du type :
    variable c might not have been initialized
    alors du coup, pour que ca marche je suis obligé de faire
    int c = 0;
    au lieu de
    int c;
    J'ai pu lire que lorsqu'on déclarait une variable sans lui inculquer de valeur, elle prenait la valeur par défaut de son type (0 pour int, null pour String me semble). Pourquoi dans mon cas cela ne fonctionne -t -il pas ?


    Voila par exemple un code qui ne fonctionne pas (je suis obligé de mettre 0 comme valeur aux variables a, b et c). Ah oui, c'est un code pour trier dans l'ordre croissant des entiers. (comme quoi j'en suis vraiment au début du début) (et cela risque d'être fort inélégant);

    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
    58
    59
    60
    61
    62
    63
    64
    import java.io.*;
    import java.util.Scanner;
    class Interferences {
    	public static void main(String[] args){
     
     
    		System.out.println("Veuillez entrer 3 nombres");
     
    		System.out.println("nombre 1 :");
    		Scanner scnombre1 = new Scanner(System.in);
    		int nombre1 = scnombre1.nextInt();
     
    		System.out.println("nombre 2 :");
    		Scanner scnombre2 = new Scanner(System.in);
    		int nombre2 = scnombre2.nextInt();
     
    		System.out.println("nombre 3 :");	
    		Scanner scnombre3 = new Scanner(System.in);
    		int nombre3 = scnombre3.nextInt();	
     
    		int a, b, c;
     
     
    		if (nombre1<nombre2 && nombre1<nombre3){
    			a = nombre1;
    			if (nombre2<nombre3){
    				b = nombre2;
    				c = nombre3;
    			}
    			else {
    				b = nombre3;
    				c = nombre2;
    			}
    		}
     
     
    		if (nombre2<nombre1 && nombre2<nombre3){
    			a = nombre2;
    			if (nombre1<nombre3){
    				b = nombre1;
    				c = nombre3;
    			}
    			else {
    				b = nombre3;
    				c = nombre1;
    			}
    		}
     
     
    		if (nombre3<nombre1 && nombre3<nombre2){
    			a = nombre3;
    			if (nombre1<nombre2){
    				b = nombre1;
    				c = nombre2;
    			}
    			else {
    				b = nombre2;
    				c = nombre1;
    			}
    		}
     
    		System.out.println(a+" "+b+" "+c);
    	}
    }

  2. #2
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Bonjour,

    En fait tu utilises les variables a, b et c dans le System.out.println alors qu'elle ne sont auparavant peut être pas utilisé puisque tu les utilises dans des "if".
    Du coup java ne veux pas afficher des variables qui sont "null" car lorsque tu fais "int a;" "a" ne prend pas la valeur 0 mais ne prend en fait rien du tout avant qu'elle ne soit utilisé.
    Donc tu as deux choix, soit tu fais "int a=0;" soit tu utilises tes variables en dehors des conditions (c'est déjà ce tu fais avec int a=0; ...)

  3. #3
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par Phonatacid Voir le message
    J'ai pu lire que lorsqu'on déclarait une variable sans lui inculquer de valeur, elle prenait la valeur par défaut de son type (0 pour int, null pour String me semble). Pourquoi dans mon cas cela ne fonctionne -t -il pas ?
    Ceci est vrai uniquement pour les attributs d'instances, mais pas pour les variables locales...

    En général lorsqu'on a une variable non-initialisé dans un code c'est un risque possible d'erreur. C'est pourquoi le compilateur génère une erreur dans ces cas là

    a++

  4. #4
    Membre habitué Avatar de jean.2edi
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juillet 2008
    Messages : 106
    Points : 131
    Points
    131
    Par défaut
    Au commencement était le C.

    En C, si elles ne sont pas initialisées, les variables prennent comme valeur la valeur de l'emplacement mémoire où elles se trouvent (je ne sais pas si je suis bien clair), et selon les exécutions de votre programme, vos variables pouvaient avoir différentes valeurs et votre programme bien fonctionner ou non si vous aviez "oublié" une initialisation.

    Pour empêcher ce comportement, les concepteurs de Java ont voulu :
    • Que les variables d'instance aient une valeur par défaut.
    • Que le compilateur interdise l'utilisation d'une variable non initialisée.


    Ceci dit, il est possible de ne pas initialiser une variable locale à la déclaration si elle l'est plus loin ; mais le compilateur doit être sûr qu'elle est initialisée avant utilisation. Dans ton code, selon les if dans lesquels il passe, tes variables a, b et c peuvent ne pas être initialisées pour le compilateur (il ne comprend quand même pas ton algorithme).
    Un code comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    int a;
    if(nombre1 > nombre 2) {
      a = nombre1;
    } else {
      a = nombre2;
    }
    passe la compilation mais pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    if(nombre1 > nombre2) {
      a = nombre1;
    }
    if(nombre1 <= nombre2) {
      a = nombre2;
    }
    par ce que le compilateur ne voit pas que tu vas forcément passer dans un des 2 cas.

    Remarques :
    • Tu vois dans l'exemple que les else sont encouragés !
    • Tu peux utiliser Math.min(int, int) !

Discussions similaires

  1. [DATA] Variable non initialisée
    Par SAS-9.3 dans le forum SAS Base
    Réponses: 2
    Dernier message: 08/02/2013, 17h54
  2. [Débutant] Variable non initialisée
    Par camara061 dans le forum C#
    Réponses: 4
    Dernier message: 10/09/2012, 16h54
  3. Problème de variables non initialisées
    Par JUSTIN Loïc dans le forum Langage
    Réponses: 8
    Dernier message: 06/07/2011, 14h38
  4. Réponses: 4
    Dernier message: 24/04/2011, 17h33
  5. erreurs de variables non initialisées
    Par setsuko974 dans le forum Langage
    Réponses: 4
    Dernier message: 15/02/2007, 09h26

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