Bonjour,je suis en train d'apprendre le java en autodidacte avec le site du zero,la je suis a la partie ou je dois faire un tp
Voila le code
import java.util.Scanner;
class Calculateur {
public static void main(String[] args) {
int mode=' ';
System.out.println("CONVERTISSEUR DEGRES CELSIUS ET FARHEINEIT");
System.out.println("-----------------------------
-------------");
//Boucle principale
do {
// Boucle 2
do {
mode = ' ';
System.out.println("Veuillez choisir votre mode");
System.out.println("1-Convertisseur Celsius-Farheineit");
System.out.println("2-Convertisseur Farheineit-Celsius");
Scanner choix = new Scanner(System.in);
mode = choix.nextInt();
if (mode != '1' && mode != '2');
choix.nextLine();
System.out.println("Mode inconnu, veuillez réitérer votre choix.");
}while (mode != '1' && mode != '2');//Boucle 2
}while(mode != '1' || mode != '2');//Boucle principale
if(mode == '1')
System.out.println("Vous avez choisis le mode 1");
if(mode == '2')
System.out.println("Vous avez choisis le mode 2");
}
}
En fait voila le principe c'est de forcer l'entrée a etre soit 1 soit 2 sinon la boucle recommence.Cependant la boucle marche,mais les conditions requise pour la stopper,la stoppe pas,j'arrive pas a comprendre pourquoi,vu que j'ai fais en sorte que la boucle ne fonctionne que lorsque mode n'est ni egal a 1 ou 2.Sinon si ça fais 1 ou 2 ca affiche ce choix,sauf que la boucle continue et ne prends pas en compte si le choix est correctement 1 ou 2.
Explications svp
J'ai besoin d'une explication claire par rapport a ce code,qu'est ce qu'il fais qu'il ne fonctionne pas,et rajouter quelque chose pour le faire marcher dans CE code,pas completement changer la façon de faire,si c'est possible bien sur
merci d'avance
" c'est de forcer l'entrée a etre soit 1 soit 2 "
" if (mode != '1' && mode != '2'); "
Faut mettre un || , pas un &&
Ah non, j'ai lu un " if (mode == '1' && mode == '2'); " désolé. Le matin.
:jsaispasducoup:
SI c'est la même syntaxe qu'en C, t'as pas mis d’accolades autours de ta fonction if. A partir du moment où t'as deux lignes d'instructions ou plus à ton if, t'en as besoin.
3 post a la suite, merci d'utiliser la fonction editer ![]()
Nouveau sur JV.com ? Il n'y a pas de fonction "éditer" sur ce site, malgré la très forte demande.
@DarkElyan : Tu as 2 soucis.
Le premier : la création de ton Scanner ne doit pas être dans la boucle, mais en dehors. En créer plusieurs peut amener à un état incohérent et donc source d'erreurs chiantes à corriger.
Le second : Ce code compile bien ? Tu n'as aucun message à la compilation outre celui "tout va bien" ? (je n'ai pas de compilo sous la main).
Si ça compile bien, je te suggère de t'intéresser à ton compilateur et lui signifier de montrer tout les warning, erreurs ... qu'il peut.
Tu as un souci au niveau de ta variable "mode". Tu la déclares en 'int', et l'initialise avec une valeur de '', donc un char. Je te suggères de n'utiliser que des entiers dans cette variable, et ton problème devrait se résorber.
Je n'ai jamais eu besoin d'utiliser le type char en Java, mais le plus logique est que, à la ligne :
if (mode != '1' && mode != '2');
Java compare la valeur entière entrée par l'utilisateur (donc 1 ou 2 dans le cas d'une saisie valide) à la valeur ASCII des caractères 1 et 2 (donc 61 et 62).
J'ai oublié aussi.
Quand tu as un code à soumettre, merci de le mettre sur un site type http://pastebin.com et de fournir le lien. C'est plus facile pour les personnes te répondant (vu que sur JV.com, il n'y a pas non plus de balise citation, code ...).
Tu as des soucis au niveau des "if" aussi.
Dans ce code, le "if" est mort. Le ; à la fin enlève toute son utilité.
if (mode != '1' && mode != '2');
choix.nextLine();
System.out.println("Mode inconnu, veuillez réitérer votre choix.");
merci, alors j'ai fais ce que tu m'as dis.
-Premièrement j'ai enlevé le Scanner de la boucle et je l'ai mis avec la declaration de variable
-j'ai supprimé le ";" apres mon if
-j'ai changé les valeur de char en int
http://pastebin.com/xLi2WrHv
voila par contre ça marche toujurs pas,la boucle se lance,mais que pour l'erreur,meme lorsque le resultat est 1 ou 2 la boucle continue de se lancer en indiquant l'erreur
(merde j'ai pas selectionné tout,il manque deux accolade a la fin mais c'est pas important,je dis juste ça pour que tu me le fasses pas remarquer)
Ce que tu nommes "boucle principal" est inutile.
Tu fais ceci :
FAIRE
...FAIRE
...
...TANT QUE (mode != 1) ET (mode != 2)
TANT QUE (mode != 1) OU (mode != 2)
Le second test d'ailleurs est toujours vrai.
Supprime ta boucle principale donc.
Tu as aussi un souci au niveau d'un de tes if, mais je te laisse chercher.
ok donc j'ai supprimé la boucle principale et j'ai remplacé la valeur du mode dans mon premier if qui etait != 0)
http://pastebin.com/DaCfNYxU
Sauf que maintenant ca m'affiche ça par exemple
Veuillez choisir votre mode
1-Convertisseur Celsius-Farheineit
2-Convertisseur Farheineit-Celsius
1
Mode inconnu, veuillez réitérer votre choix.
Vous avez choisis le mode 1
En gros la ligne System.out.println("Mode inconnu, veuillez réitérer votre choix.");
s'affiche a chaque fois même lorsque l'entrée a ete prise en compte,j'ai pourtant la condition précisé avec le while que la boucle s'execute lorsque mode n'est ni egal a 1 ni egal a 2.
"if (mode != 1 || mode != 2)"
Dans ce cas si mode est différent de 1 la condition s’exécute ou si mode est différent de 2.
Donc en gros la condition s’exécutera tout le temps.
Pour le souci de la ligne qui s'affiche à chaque fois, voir le 3ème message de Chocolayte.
Bon c'est en train de me rendre fou
Coffres,cette ligne c'est pour dire si mode n'est pas egal a 1 ou mode n'est pas égal a 2,la boucle s'execute.
Pour que vous comprenez un peu comment je compte coder mon programme j'ai fais ça sur word
Variable choix= sans valeur
BOUCLE 1 a executer minimum une fois{
Renseignement du mode selectionné
Lancement du choix
Saisie
Stockage}
-CONDITION 1>
Si stockage est different de 1 ou 2 >
Execution> Afficher message d'erreur
et recommencer procédure de stockage
-CONDITION 2
Si stockage est égal a 1 ou 2
Execution >Valider le choix soit 1 soit 2
si le choix est 1 stopper la boucle et afficher le choix du mode 1
Si le choix est 2 stopper la boucle et afficher le choix du mode 2
En fait j'arrive a faire marcher le code maintenant,le seul problème que j'ai c'est le message d'erreur qui s'affiche quand il dois pas s'afficher genre ça me fais "veuillez reesayer vous avez choisi le mode 1" -_- et s'affiche pas quand il dois
"Coffres,cette ligne c'est pour dire si mode n'est pas egal a 1 ou mode n'est pas égal a 2,la boucle s'execute. "
Je sais, et vu qu'une variablement ne peux pas être égal à deux nombre, cette condition sera toujours vrai.
elle dois pas être égale a deux nombres,C'est deux conditions differentes,c'est si SOIT elle fais ne pas 1 si SOIT elle ne fais 2.
Tu sais que || veut dire "ou" ?
Ah oui désolé j'avais mal lu.
Donc j'ai vais mieux t'expliquer, imagine si mode est égal a un, le mode != 1 sera faux, mais le mode != 2 sera vrai, donc au final la condition sera vrai.
Si mode est égal à deux, mode != 1 sera vrai et mode != 2 sera faux, donc la condition sera vrai.
Et pour finir, si mode est égal à autre chose que 1 et 2 (disons 3) mode != 1 sera vrai, mode != 2 sera vrai, donc la condition sera vrai.
Tu vois ce que je veux dire ?
Euh non pas trop,mais je pense que tu te trompes,vu que même sur le site il fais comme ça ^^' a moins que je t'ai mal compris.
Sinon j'ai enfin réussi a faire marcher comme je veux le code,En fait la solution etait de créer une boucle du programme principal en ajoutant une variable determinant si le programme continue a faire tourner la boucle.
http://pastebin.com/A7QxPVRn
Voila cependant il reste un petit defaut,tout marche,ca recommence si c'est pas 1 ou 2,ca stoppe si c'est 1 ou 2 et ça affiche le choix,le seul hic c'est que par exemple
Veuillez choisir un mode
1- Mode Celsius Farheineit
2 -Mode Celsius Farheineit
1
Vous avez choisi le mode 1
Vous avez choisi le mode 1
en gros ça affiche deux fois au lieu d'une la phrase "vous avez choisi le mode x" est ce que c'est lié au fait que le "do" s'effectue minimum une fois?est ce que c'est un autre problème?et comment changer ça?