Erreur d'initialisation de variable

Résolu/Fermé
Xelo-arx Messages postés 10 Date d'inscription mercredi 8 octobre 2014 Statut Membre Dernière intervention 25 août 2020 - 8 oct. 2014 à 20:12
Xelo-arx Messages postés 10 Date d'inscription mercredi 8 octobre 2014 Statut Membre Dernière intervention 25 août 2020 - 11 oct. 2014 à 12:41
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

KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
8 oct. 2014 à 20:18
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 ?
0
Xelo-arx Messages postés 10 Date d'inscription mercredi 8 octobre 2014 Statut Membre Dernière intervention 25 août 2020
8 oct. 2014 à 20:26
J'ai rajouté à la ligne 17 : if ((a > 24) | (a < 3))

Mais j'ai toujours le même problème
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
8 oct. 2014 à 20:40
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.
0
Xelo-arx Messages postés 10 Date d'inscription mercredi 8 octobre 2014 Statut Membre Dernière intervention 25 août 2020
8 oct. 2014 à 20:44
G G à toi, mon programme marche, et maintenant je comprends mieux comment fonctionne java =D
0
Xelo-arx Messages postés 10 Date d'inscription mercredi 8 octobre 2014 Statut Membre Dernière intervention 25 août 2020
8 oct. 2014 à 23:07
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à..
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
9 oct. 2014 à 07:32
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 ?
0