Structure conditionnelle - question [Résolu/Fermé]

Signaler
Messages postés
116
Date d'inscription
vendredi 9 novembre 2012
Statut
Membre
Dernière intervention
18 août 2013
-
Messages postés
16327
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
4 mai 2021
-
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.

2 réponses

Messages postés
16327
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
4 mai 2021
2 826
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 ?
Messages postés
116
Date d'inscription
vendredi 9 novembre 2012
Statut
Membre
Dernière intervention
18 août 2013
6
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.
Messages postés
116
Date d'inscription
vendredi 9 novembre 2012
Statut
Membre
Dernière intervention
18 août 2013
6
En effet, c'est plus simple que je ne l'imaginais, je ne voyais pas ça comme ça. Je pensais à enlever le " - " avec un replaceAll, mais comme ça c'est nickel !

Je vais me débrouiller pour le reste.
Merci encore, bonne soirée
Messages postés
116
Date d'inscription
vendredi 9 novembre 2012
Statut
Membre
Dernière intervention
18 août 2013
6
Après plusieurs essais et recherche, je n'arrive pas à saisir comment faire pour utiliser plusieurs fois le même scanner, en cherchant je suis même tombé sur ça https://forums.commentcamarche.net/forum/affich-23304654-java-variable-scanner-boucle-do-while mais j'y arrive pas ^^
Messages postés
16327
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
4 mai 2021
2 826
Je ne vois pas ce qu'il y a de difficile, il suffit d'enlever le deuxième Scanner, et utiliser le premier à la place, exactement de la même manière que la première fois :

Scanner clavier = new Scanner(System.in);

System.out.print("Entrez un jour : ");
byte jour = clavier.nextByte();

if (jour<1 || jour>31)
{
    System.out.println("Veuillez ressaisir un jour");
    jour = clavier.nextByte();
}
Messages postés
116
Date d'inscription
vendredi 9 novembre 2012
Statut
Membre
Dernière intervention
18 août 2013
6
Au temps pour moi. J'avais complètement zappé de faire le "Scanner clavier" au tout début.
D'ailleurs, je remarque que sur les sujets sur lesquels je suis tombé, c'était souvent "scanner clavier"; est-ce que c'est une convention, obligatoire, ou je peux appeler mon scanner comme je veux ?

Merci
Messages postés
16327
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
4 mai 2021
2 826
Bah si tu regardes mes discussions forcément tu vas te retrouver avec les mêmes noms, mais c'est plus des idiotismes. Les conventions portent surtout sur la manière d'écrire les noms, pas de déterminer quels sont ces noms, même s'il est toujours préconisé des noms qui font sens avec l'utilisation que l'on en fait.

Remarque : dans la documentation officielle les Scanner sont souvent notées sc, tu trouveras donc également souvent cette notation, si tu lis des codes.