Structure conditionnelle - question
Résolu
Vitaldix
Messages postés
116
Date d'inscription
Statut
Membre
Dernière intervention
-
KX Messages postés 16761 Date d'inscription Statut Modérateur Dernière intervention -
KX Messages postés 16761 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour,
j'ai les quelques lignes de codes suivantes extraites de mon programme :
System.out.println("Entrez un jour sous la forme JJ");
Scanner J = new Scanner(System.in);
byte JJ = J.nextByte();
if (JJ>31);
{
System.out.println("Veuillez ressaisir un jour");
Scanner nJ = new Scanner(System.in);
byte Nouveaujour = nJ.nextByte();
JJ = Nouveaujour;
}
Le problème c'est que, quelque soit mon JJ, ça me demande de ressaisir un jour.
Quelqu'un sait pourquoi ? Merci.
j'ai les quelques lignes de codes suivantes extraites de mon programme :
System.out.println("Entrez un jour sous la forme JJ");
Scanner J = new Scanner(System.in);
byte JJ = J.nextByte();
if (JJ>31);
{
System.out.println("Veuillez ressaisir un jour");
Scanner nJ = new Scanner(System.in);
byte Nouveaujour = nJ.nextByte();
JJ = Nouveaujour;
}
Le problème c'est que, quelque soit mon JJ, ça me demande de ressaisir un jour.
Quelqu'un sait pourquoi ? Merci.
A voir également:
- Structure conditionnelle - question
- Mise en forme conditionnelle excel - Guide
- Excel liste déroulante conditionnelle - Guide
- Logiciel calcul structure bois gratuit - Télécharger - Architecture & Déco
- Structure d'un rapport de stage - Guide
- New cpu installed ftpm/psp nv corrupted or ftpm/psp nv structure changed - Forum BIOS
2 réponses
Il ne faut pas mettre de point-virgule après le if.
Quelques remarques :
- il est inutile de déclarer plusieurs fois un Scanner sur System.in, on peut utiliser plusieurs fois le même
- ta variable NouveauJour ne sert à rien, tu peux directement affecter JJ
- au passage les noms de variables devraient commencer par des minuscules
- je ne vois pas l'intérêt d'avoir un byte ici, c'est un int dont tu as besoin
Et surtout : que se passe-t-il si ta deuxième saisie n'est toujours pas bonne ?
Quelques remarques :
- il est inutile de déclarer plusieurs fois un Scanner sur System.in, on peut utiliser plusieurs fois le même
- ta variable NouveauJour ne sert à rien, tu peux directement affecter JJ
- au passage les noms de variables devraient commencer par des minuscules
- je ne vois pas l'intérêt d'avoir un byte ici, c'est un int dont tu as besoin
Et surtout : que se passe-t-il si ta deuxième saisie n'est toujours pas bonne ?
Ah oui ! ça me semble bizarre, il me semble que la dernière fois que j'avais fait ça, il se passait quelque chose de différent, une erreur a été signalée il me semble.
Concernant tes remarques :
-en fait, j'ai toujours fait comme je l'ai fait là, j'ai jamais essayé d'utiliser plusieurs fois le même. Bon pour l'instant, tant que ça marche je laisse comme ça, après pour l'améliorer au maximum j'essaierai de faire ça.
-je vois pas trop comment faire en fait...d'ailleurs sur ce point là, après j'aurai un problème puisque je vais devoir faire afficher le jour saisi (ainsi que mois et années) à la fin du programme...or là ma variable est déclarée juste dans mon "if", donc il va pas la reconnaître...comment faire pour la faire "sortir" de mon if ?
-est-ce que c'est important, ou c'est juste une convention ?
-un byte est moins lourd qu'un int non ? il y a pas besoin de taper 4995544 pour un jour ? et même si ça serait le cas, je compte rajouter des exceptions de toutes façons.
Je sais que ça ne va rien changer si la deuxième saisie n'est pas bonne, pour l'instant c'est juste un "test". Mais après je ferai
if (JJ>31)
{
while (true)
{
System.out.println("Veuillez ressaisir un jour");
Scanner nJ = new Scanner(System.in);
byte Nouveaujour = nJ.nextByte();
JJ = Nouveaujour;
if (JJ<31)
{ break; }
Merci.
Concernant tes remarques :
-en fait, j'ai toujours fait comme je l'ai fait là, j'ai jamais essayé d'utiliser plusieurs fois le même. Bon pour l'instant, tant que ça marche je laisse comme ça, après pour l'améliorer au maximum j'essaierai de faire ça.
-je vois pas trop comment faire en fait...d'ailleurs sur ce point là, après j'aurai un problème puisque je vais devoir faire afficher le jour saisi (ainsi que mois et années) à la fin du programme...or là ma variable est déclarée juste dans mon "if", donc il va pas la reconnaître...comment faire pour la faire "sortir" de mon if ?
-est-ce que c'est important, ou c'est juste une convention ?
-un byte est moins lourd qu'un int non ? il y a pas besoin de taper 4995544 pour un jour ? et même si ça serait le cas, je compte rajouter des exceptions de toutes façons.
Je sais que ça ne va rien changer si la deuxième saisie n'est pas bonne, pour l'instant c'est juste un "test". Mais après je ferai
if (JJ>31)
{
while (true)
{
System.out.println("Veuillez ressaisir un jour");
Scanner nJ = new Scanner(System.in);
byte Nouveaujour = nJ.nextByte();
JJ = Nouveaujour;
if (JJ<31)
{ break; }
Merci.
"une erreur a été signalée il me semble."
Il y aura une erreur si tu mets un else derrière, parce qu'en fait le if est déjà terminé.
"j'ai toujours fait comme je l'ai fait là"
C'est une mauvaise habitude...
"ma variable est déclarée juste dans mon 'if'"
JJ est déjà déclarée en dehors, tu devrais t'en servir directement.
"est-ce que c'est important, ou c'est juste une convention"
Les conventions sont importantes !
"un byte est moins lourd qu'un int non ?"
Oui, mais ce n'est pas un entier, c'est la représentation d'un octet, si tu veux un entier court utilises les short mais ce n'est pas très pratique, de toute façon tu n'en es pas à optimiser ton code...
Il y aura une erreur si tu mets un else derrière, parce qu'en fait le if est déjà terminé.
"j'ai toujours fait comme je l'ai fait là"
C'est une mauvaise habitude...
"ma variable est déclarée juste dans mon 'if'"
JJ est déjà déclarée en dehors, tu devrais t'en servir directement.
"est-ce que c'est important, ou c'est juste une convention"
Les conventions sont importantes !
"un byte est moins lourd qu'un int non ?"
Oui, mais ce n'est pas un entier, c'est la représentation d'un octet, si tu veux un entier court utilises les short mais ce n'est pas très pratique, de toute façon tu n'en es pas à optimiser ton code...
D'accord, j'ai compris ! donc si je récapitule, tant que ma variable est déclarée à l'exterieur d'un if (ou d'une boucle), si sa valeur change dans un if (ou dans une boucle) elle le sera partout !
Donc c'est pour ça que ça marchait pas avant, car ma variable nouveaujour était une variable locale déclarée dans mon if, donc en dehors de celui-ci, la variable "n'existait plus".
Merci !
Au fait, est-ce que c'est possible, si je tape une année négative,
de convertir mon année en string
enlever le " - " devant l'année
pour ensuite ajouter "avant J-C" à la suite ?
Ou alors ce serait trop compliqué ?
Merci.
Donc c'est pour ça que ça marchait pas avant, car ma variable nouveaujour était une variable locale déclarée dans mon if, donc en dehors de celui-ci, la variable "n'existait plus".
Merci !
Au fait, est-ce que c'est possible, si je tape une année négative,
de convertir mon année en string
enlever le " - " devant l'année
pour ensuite ajouter "avant J-C" à la suite ?
Ou alors ce serait trop compliqué ?
Merci.