Exercice location de velo

InstaDD Messages postés 30 Date d'inscription   Statut Membre Dernière intervention   -  
 dfsd -
Bonjour,

Bonjour, j'ai un exercice dont je n'arrive vraiment pas a aller au bout quelqu'un pourrait m'aider ?

L'intitulé est :

"Le programme demandera à l'utilisateur d'entrer les heures de début et de fin de location sous la forme d'entiers (on ne se préoccupe pas des minutes pour simplifier).

Les tarifs de location sont définis comme suit :

1 franc par heure si le vélo est loué entre 0h et 7h ou entre 17h et 24h;

2 francs par heure si le vélo est loué entre 7h et 17h "

Voici le code que j'ai ecrit mais ca ne marche pas du tout quelqu'un peut m'aider svp ?


import java.util.Scanner;

 public class Velo {

     public static void main(String[] args) {
         Scanner clavier = new Scanner(System.in);
         System.out.print("Donnez l'heure de début de la location (un entier) : ");
         int debut = clavier.nextInt();
         System.out.print("Donnez l'heure de fin de la location (un entier) : ");
         int fin = clavier.nextInt();

         if ((debut > 24 || debut < 0) || (fin > 24 || fin < 0) ) {
          System.out.println("Les heures doivent être comprises entre 0 et 24 !"); }
         
         if (fin == debut){
         System.out.println("Bizarre, vous n'avez pas loué votre vélo bien longtemps !");}
         
         if ( debut > fin ) {
         System.out.println("Bizarre, le début de la location est après la fin ...");}
         
         
         int Hc = 0;
         int Hp = 0;
         int montant = 0;
         int duree = 0;
         
         if (debut<7 && fin<=7){
           Hc = (fin-debut);
           montant = Hc;
           duree = Hc;}
           
         if (debut<7 && fin<= 17){
           Hc = (7 -debut);
         Hp = (fin-7);
         montant = Hc + Hp*2;
            duree = Hc+Hp;}
        
         
         if (debut<7 && fin<= 24){
          Hc = ((7 -debut)+(fin-17));
       Hp = 10;
       montant = Hc+ (Hp*2);
          duree = Hc+Hp;}
       
         if (debut>7 && fin<= 17){
         
       Hp = (fin-debut);
       montant = (Hp*2);
          duree =Hp;
    
         if (debut>7 && fin<= 24){       
    Hc = (fin-17);
    Hp = (17-debut);
    montant = Hc+ (Hp*2);
          duree =Hp+Hc;}
         
        if (debut>17){
         Hc= (fin-17);
         montant = Hc;
            duree = Hc;}
         
         if ( Hp==0 ){
          System.out.println("Vous avez loué votre vélo pendant"+duree) ;
          System.out.println("heure(s)au tarif horaire de 1.0 francs") ;
          System.out.print("Le montant total à payer est de "+ montant);
          System.out.println(" francs.");}
         else {
          System.out.println("Vous avez loué votre vélo pendant"+duree) ;
          System.out.print (+Hc);
          System.out.println("heure(s)au tarif horaire de 1.0 francs") ;
          System.out.print (+Hp);
          System.out.println("heure(s)au tarif horaire de 2.0 francs") ;
          System.out.print("Le montant total à payer est de "+ montant);
          System.out.println(" francs.");}
       
                        

               clavier.close();}
     
       
     }
 }

3 réponses

Nexii Messages postés 338 Date d'inscription   Statut Membre Dernière intervention   588
 
Si tu indentais ton code correctement, tu aurais vu l'erreur....
Tu as mal fermé l'un de tes if :
 if (debut>7 && fin<= 17){
0
InstaDD Messages postés 30 Date d'inscription   Statut Membre Dernière intervention  
 
j'ai corrigé cette erreur, mais le code ne donne pas du tout ce qu'il devrait produire !
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Bonjour,

Pour rappel, il y a des conventions d'écriture en Java.
En particulier : the closing brace should begin a line

Je ne sais pas pourquoi tu mets toutes tes accolades à la fin des lignes, mais c'est illisible, surtout quand l'indentation est incohérente.

Pour le reste, je trouve ton code très compliqué pour un exercice aussi simple. De plus tu ne gères pas le cas où tu prends le vélo tard le soir (22h par exemple) pour le rendre le lendemain matin (7h par exemple).
0
InstaDD Messages postés 30 Date d'inscription   Statut Membre Dernière intervention  
 
dsl je debute et n'ai pas encore toutes les conventions d'écriture en tete !
J'aimerai faire plus simple mais comment ca ???
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Avec une boucle for ce serait simple.
Tu pars de l'heure de début tu vas jusqu'à l'heure de fin et à chaque heure tu rajoutes le prix de l'heure en cours (ce que ferait un parcmètre mécanique).

Exemple :

for (int heure = heureDebutLocation; heure < heureFinLocation; heure++) {
    if (heure >= debutHeurePleine && heure < debutHeureCreuse) {
        totalHeurePleine++;
    }
    else {
        totalHeureCreuse++;
    }
}

Remarque :
Le fait de prendre des heures entières laisse une ambiguïté dans l'énoncé.
Si je dis que je prends le vélo à 10h et que je le rends à 11h est-ce que je paie 1h (de 10h00 à 11h00) ou est-ce que je paie 2h (l'heure 10 et l'heure 11) ?
Dans le code cela changerait la condition
heure < heureFinLocation
en
heure <= heureFinLocation
...
0
InstaDD Messages postés 30 Date d'inscription   Statut Membre Dernière intervention  
 
merci cela fonctionne avec la correction que tu as ajouté tu as bien senti le coup !!
0
InstaDD Messages postés 30 Date d'inscription   Statut Membre Dernière intervention  
 
J'ai une derniere petite question ma condition au début bien que pas belle fonctionne :

 if ((debut > 24 || debut < 0) && (fin > 24 || fin < 0) ) {
System.out.println("Les heures doivent être comprises entre 0 et 24 !"); }

Voila ma question, ces conditions doivent provoquées l'arrêt du programme, sauf que je n'ai pas le droit d'utiliser la fonction return .

Quelqu'un pourrait m'expliquer une procédure simple pour arriver au meme resultat ?? merci
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Il n'y a que 3 manières d'arrêter un programme.
  • Terminer la méthode main : soit en exécutant toutes les instructions jusqu'à l'accolade fermante, soit avec un
    return;
  • Générer une exception
    throw new Exception("msg");
    et la laisser se propager
    throws Exception
    au delà de la méthode main ce qui arrête le programme.
  • Forcer l'arrêt du programme (déconseillé !) avec un
    System.exit(0);
    le 0 étant pour indiquer la bonne fin du programme (ce qui n'a pas de sens, vu que si le programme se terminait bien on ne devrait pas avoir à utiliser System.exit), on peut bien sûr mettre autre chose que 0 (ce que l'on veut) pour indiquer un problème, mais une Exception est beaucoup plus parlante...
0
dfsd
 
avec des else if ....
0