Erreur d'initialisation de variable

Résolu
Bonjour,
je fais un programme contenant des fonctions/procédures, et lors de la compilation l'erreur : variable TransTotal might not have been initialized ( ligne 24)

Ma fonction est la suivante :

public static double calculerFraisTransport(double a, double b){

double TransErable, TransBleuets, TransTotal;

TransBleuets = 0.5 * b;

if((a >= 3) & (a <= 12)){
	TransErable = 1.5 * a;
	TransTotal = TransBleuets + TransErable;
}
else{
	if((a > 12) & (a <= 24)){
		TransErable = 1.0 * a;
		TransTotal = TransBleuets + TransErable;
	}
	else{
		if(a > 24){
			TransErable = 0;
			TransTotal = TransBleuets;
		}
	}
}

return (TransTotal);

}


Merci de m'aider rapidement svp

1 réponse

  1. Modérateur
    Bonjour,

    Java fait une analyse pour voir si tous les cas sont gérés, or ici tu en as oublié un.

    Si a<3 qu'elle est la valeur de TransTotal ?
    1. J'ai rajouté à la ligne 17 : if ((a > 24) | (a < 3))

      Mais j'ai toujours le même problème
    2. Modérateur
      Quand je parles de l'analyse que fait Java, il faut bien comprendre qu'en réalité il ne va pas regarder en détail si toutes les valeurs de a sont couvertes. Ce qu'il va regarder ce sont les chemins qui sont emprunter avec les if et les else, et regarde si dans tous les chemins possibles il y a une initialisation de TransTotal.
      Or dans ton if ((a > 24) | (a < 3)) il n'y a pas de else. Ça n'a pas forcément de sens mathématiques d'en mettre un, mais pour le programme ça a un sens. Il faudrait donc mettre un else à chaque if, ce qui dans ton cas permettrait de simplifier comme ceci :

      if(a >= 3 && a <= 12){
          TransTotal = ...
      }
      else if(a > 12 && a <= 24) {
          TransTotal = ...
      }
      else { // (a < 3 || a > 24)
         TransTotal =  ...
      }

      Dans tous les cas, TransTotal aura bien une valeur et Java est content.
    3. G G à toi, mon programme marche, et maintenant je comprends mieux comment fonctionne java =D
    4. Mon programme ne marche pas totalement, finalement.
      J'ai la première question qui me bloque dans le programme :

      Ecrivez une fonction saisirNbSiropErable qui demande à l'utilisateur un nombre de cruchons de sirop d'érable et qui retourne la valeur saisie. Si la valeur n'est pas multiple de 3 ou est incorrecte (inferieure à 0, par exemple), un message d'erreur doit être affiché et l'utilisateur doit saisir une nouvelle valeur.

      public static double saisirNbSiropErable(double a){
      
      double c;
      
      System.out.println("Entrez le nombre de cruchon(s) de sirop d'erable que vous voulez(vendus par lot de 3, donc multiple de 3) : ");
      c = clavier.nextDouble();
      
      while((c < 0) || (c % 3 != 0)){
      	System.out.println("Erreur ! Entrez une nouvelle valeur avec les memes conditions : ");
      	c = clavier.nextDouble();
      	}
      return (c);
      }


      J'ai fait ça, je sais que j'ai pas le droit de faire des saisies clavier dans une fonction, mais je ne vois vraiment pas comment faire dans ce cas-là..
    5. Modérateur
      1) À quoi te sers le paramètre
      double a
      ?
      2) Évites de faire des calculs
      c % 3
      lorsque tu as
      double c
      , ce devrait être
      int c
      .
      3) C'est quoi ta question ? Ton programme fonctionne non ?