Java:d'une méthode

Signaler
-
 shishay -
Hello,
je fais un petit exercice de java,
je cherche un volontiers qui pourrait m'aider à faire une méthode static qui ne prends pas d'argument qui demande d'entrer une valeur entre tel et tel tant que le valeur n'est pas entre les deux nombre qui était donné la méthode doit reposer la question! donc non seulement il doit demander d'entrer une valeur il doit aussi vérifier si la valeur entrer est entre x et y.
je vous suis très reconnaissant en avance!
shishay

3 réponses

Messages postés
27644
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
21 février 2020
2 127
Bonjour,

Commence par lire ceci :
http://www.commentcamarche.net/faq/10925-demander-de-l-aide-pour-vos-exercices-sur-ccm

Puis reviens nous voir avec le code que tu auras essayé en expliquant en détail sur quel point précis tu bloques.

je vous en remercie!!! en effet, je vais mettre mes programmes ici en bas mais avant d'envoyer j'ai voulais comparer mon programme avec celle de la volontiers,
voici l’exercice:

Le but de cet exercice est de déterminer la date des Pâques (chrétiennes gré go-riennes) : on demande à l’utilisateur d’entrer une année et le programme affiche la date de Pâques de l’année correspondante.

Par exemple :Entrez une annee (1583-4000) :
2006
Date de Pâques en 2006 : 16 avril

On vous demande pour cela d’écrire une classePaquesqui contient trois mé-thodes :1. une méthode static que demanderAnneequi ne prend pas d’argument etretourne un entier ; cette méthode doit :— demander une année à l’utilisateur(message : «Entrez une annee (1583-4000) :»
, voir l’exempled’affichage ci-dessus) ;
tant que l’année entrée n’est pas conforme,cette méthode devra reposer la question.5
— vérifier que l’année saisie est bien entre 1583 et 4000 ;
sinon redeman-der ;— retourner l’année (correcte) saisie



public static int ndemanderAnnee()
 { Scanner key = new Scanner(System.in);
  do {
   
    System.out.println("Entrez une annee (1583-4000)");
   annee =key.nextInt();
   }while(annee<4000 && annee<1583);
  return annee;
 }
  




Alors je crois bien que ma méthode demande bien de entrer une valeur à l'utilisateur mais pas sur qu'il fasse entre tel nombre et tel et si vous arrivez à me dire pour quoi il ne retourne pas une valeur mais comme c'est écrit sans me donner la réponse;)

à remarquer c'est une partie de mon programme donc c'est parce que je souhaite tester à la fois une.
tarek_dotzero
Messages postés
815
Date d'inscription
jeudi 19 juillet 2007
Statut
Membre
Dernière intervention
3 février 2020
110
Bonjour,

Revérifiez votre condition, en traduisant une boucle de type "Répéter ... Jusqu'à" en algorithmique à une boucle de type "do...while" la condition doit être inversée.
> tarek_dotzero
Messages postés
815
Date d'inscription
jeudi 19 juillet 2007
Statut
Membre
Dernière intervention
3 février 2020

Mercie bien!
Je fais celle-ci, mais ça pose plus alorsque je entre un nombre inferrière de 1583?
public static int ndemanderAnnee()
	{ Scanner key = new Scanner(System.in);
		do {
			
			 System.out.println("Entrez une annee (1583-4000)");
			annee =key.nextInt();
		 }while(annee>4000 && annee<1583);
		return annee;
	}


est ce que c'est le opérateur qui doit être l'inverse( &&)? comme celle-ci(||)?
ou bien la condition doit être que while mais pas do ..while? lorsque vous dites l'inversée?
KX
Messages postés
16110
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
13 février 2020
2 535 > shishay
Bonjour,

Effectivement il y a une confusion entre les opérateurs OU
||
est le contraire de ET
&&
, aucun nombre ne peut-être à la fois inférieur à 1583 et supérieur à 4000, c'est l'un ou l'autre.

Il faut écrire le code comme à l'oral : "Faire (...) tant que l'année est inférieure à 1583 ou supérieure à 4000."
do { ... } while (annee < 1583 || annee > 4000);


Remarque : dans le code, où est déclarée la variable
annee
? Ce devrait être une variable locale dont la portée ne dépasse pas celle de la méthode, ici elle est probablement static ce qui va entraîner des effets de bords dans le reste du programme.

De plus, ton code ne gère pas le cas où l'utilisateur tape autre chose qu'un nombre, par exemple un mot...
Hello,
Et mtn, ce que ça vous sembles correct la partie demander un nombre entre tel et tel?


public static int ndemanderAnnee()
{
Scanner key = new Scanner(System.in);
do {
boolean chiffre=false;
System.out.println("Entrez une annee (1583-4000)");
annee =key.nextInt();
}while( annee<1583 || annee>4000);

return annee;
}


et le variables annee est static car je vais l'utiliser une fois que cette méthode marche bien l'exercie va contienuer...
donc le faite qu'il soit globale, c'est fait éxprer pour en suite l'utiliser à d'autre méthode, ou bien je deverait appeller juste la méthode ndemanderAnnee()?

pour la vérification de saisire que un entier, corrigez-moi svp ce-ci:
try {
    int teste = Integer.parseInt(annee);
    chiffre = true; // si ton exécution arrive jusque là, ça signifie qu'il n'y a aucune exception lancée et que ta saisie est donc bien un chiffre
  } catch(NumberFormatException e) {
    System.out.println("Cette valeur n'est pas un chiffre, essaie encore !");
  }