[java]où dois je placer le tarif bleu

[Résolu/Fermé]
Signaler
-
 domxaline -
Bonjour,
voilà mon exercice:
  • Un conducteur de moins 25 ans et titulaire du permis depuis moins de 2 ans, se voit attribuer le tarif rouge, si toutefois il n'a jamais été responsable d'accident. Sinon, la compagnie refuse de l'assurer.
  • Un conducteur de moins 25 ans et titulaire du permis depuis plus de 2 ans, ou de plus de 25 ans mais titulaire du permis depuis moins de deux ans a le droit au tarif orange s'il n'a jamais provoqué d'accident, au tarif rouge pour un accident, sinon il est refusé.
  • Un conducteur de plus de 25 ans et titulaire du permis depuis plus de 2 ans bénéficie du tarif vert s'il n'est à l'origine d'aucun accident et du tarif orange pour un accident, du tarif rouge pour deux accidents, et refusé au-delà
  • De plus, pour encourager la fidélité des clients acceptés, la compagnie propose un contrat de la couleur bleu immédiatement la plus avantageuse s'il est entré dans la maison depuis plus d'un an.


mon question est que je dois faire pour tarif bleu? veuillez m'aidez svp
import java.util.Scanner;
public class Testing1 
{
  public static void main(String[] args) 
  {
  char reponse='O';
  do
  {
  System.out.println("Entrez l'age:");
  Scanner valeur=new Scanner(System.in);
  int age=valeur.nextInt();
  System.out.println("Entrez l'année permis:");
  int permis=valeur.nextInt();
  System.out.println("Entrez nb d'accident:");
  int acci=valeur.nextInt();
  
     if(age<=25 & permis<=2 & acci==0)
    { System.out.println("Tarif rouge"); }
    else if((age<25 & permis>2 & acci==0)||(age>25 & permis <2 & acci==0))
    { System.out.println("tarif orange"); } 
    else if((age<25 & permis>2 & acci==1)||(age>25 & permis <2 & acci==1))
    {System.out.println("tarif rouge");}
   
    if(age>25 & permis >2 & acci==0)
      { System.out.println("tarif vert"); }
       else if(age>25 & permis >2 & acci==1)
        { System.out.println("Tarif Orange"); }
       else if(age>25 & permis >2 & acci==2)
        {System.out.println("tarif rouge");}
       else if(age>25 & permis >2 & acci>2)
       {  System.out.println("imcompatible pour être assuré"); }
       
   
   System.out.println("");
   System.out.println("Voulez vous reessaye, O/N?");
   Scanner sc=new Scanner(System.in);
   reponse=sc.nextLine().charAt(0);
      }while(reponse=='O');
  System.out.println("Fin du programme,Au revoir.");
  }
}





EDIT: Précision du langage dans la coloration syntaxique.

6 réponses

Messages postés
16372
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
23 juillet 2021
2 859
Bonjour,

Pour prendre en compte ce cas il te manque une information : la date de souscription de l'assuré (et donc son ancienneté), si elle est supérieure à 1 an, tu rentres directement en tarif bleu.

Pour le reste, je pense que tu peux faire des simplifications dans tes if, tu pourrais par exemple t'aider d'une table de Karnaugh.

Remarque : tu devrais utiliser
&&
pour les booléens,
&
a un comportement un peu différent et ne devrait être utilisé que pour les calculs de bits à bits.
vous pouvez aidez simplifiez les if svp?
Messages postés
16372
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
23 juillet 2021
2 859
Je pars du principe que tu as lu et compris l'article sur les tables de Karnaugh dont j'ai donné le lien tout à l'heure.

Et je pose :
A, la condition sur l'age, avec 0 si <=25 et 1 si >25
B, la date du permis, avec 0 si <2 et 1 si >=2
C, l'ancienneté du contrat, avec 0 si <1 et 1 si >=1
D, le nombre d'accident, avec 0 si =0 et 1 si >0 (ce n'est pas parfait, mais c'est un début)

Le tableau de Karnaugh devrait donner (par exemple)

  CD 00 01   11 10
AB
00 R N N B
01 O R1 B1 B
11 V O1R2 B2 B
10 O R1 B1 B

Avec R = tarif rouge, O = tarif orange, V = tarif vert, B = tarif bleu, N = refusé. Et pour gérer le cas particulier du nombre d'accident, on a R1 = Rouge si 1 accident ou refusé si plus, B1 = Bleu si 1 accident ou refusé si plus, B2 = Bleu si 1 ou 2 accidents, refusé si plus et enfin O1R2 = Orange si 1 accident, Rouge si 2 accidents, refusé si plus.

Dans les simplifications on voir apparaître trois choses. La plus évidente c'est la quatrième colonne sur le tarif bleu, il y a également les lignes 2 et 4 qui sont identiques. Et c'est plus anecdotique, mais on peut également simplifier les deux N de la première ligne.

Cela nous donne (à vérifier bien sûr, je fais ça sans tester)

public static String tarif(int age, int permis, int contrat, int accident)
{
    // 4è colonne
    if (contrat>=1 && accident==0)
    {
// pour encourager la fidélité des clients acceptés, la compagnie propose un contrat de la couleur bleu immédiatement la plus avantageuse s'il est entré dans la maison depuis plus d'un an.
        return "bleu";
    }

    // 2è et 4 ligne
    if ((age<25 && permis>=2) || (age>=25 && permis<=2)
    {
// Un conducteur de moins 25 ans et titulaire du permis depuis plus de 2 ans, ou de plus de 25 ans mais titulaire du permis depuis moins de deux ans a le droit au tarif orange s'il n'a jamais provoqué d'accident, au tarif rouge pour un accident, sinon il est refusé.

        // 1ère colonne
        if (contrat<1 && accident==0)
            return "orange";

        // 2è et 3è colonne
        if (accident>1)
            return "refus";
        if (anciennete<1)
            return "rouge"; // colonne 2
        else
            return "bleu"; // colonne 3
    }

    // 1è ligne
    if (age<25 && permis<2)
    {
// Un conducteur de moins 25 ans et titulaire du permis depuis moins de 2 ans, se voit attribuer le tarif rouge, si toutefois il n'a jamais été responsable d'accident. Sinon, la compagnie refuse de l'assurer.

        if (accident==0)
            return "rouge"; // colonne 1
        else
            return "refus"; // colonne 2 et 3
    }

    // 3è ligne
    if (age>=25 && permis <=2) // toujours vrai vu qu'on a déjà traité les autres cas
    {
// Un conducteur de plus de 25 ans et titulaire du permis depuis plus de 2 ans bénéficie du tarif vert s'il n'est à l'origine d'aucun accident et du tarif orange pour un accident, du tarif rouge pour deux accidents, et refusé au-delà

        // colonne 1
        if (contrat<1 && accident==0)
            return "orange";

        // colonne 2 et 3
        if (accident > 2)
            return "refus";
        else
        {
            // colonne 3
            if (contrat>=1)
                return "bleu";

            // colonne 2
            if (accident==1)
                return "orange";
            else // accident==2
                return "rouge";
        }
    }
}

Remarque : il y a d'autre manières de réfléchir. On peut également partir d'une "couleur" de départ (par exemple "bleu" ou "vert" selon l'ancienneté) et progressivement passé au orange, rouge ou refus dès lors que les conditions sont égrainées peu à peu. C'est une méthode particulièrement utile quand il y a beaucoup de conditions, d'états possibles et des évolutions à prévoir.
Messages postés
188
Date d'inscription
lundi 16 mai 2005
Statut
Membre
Dernière intervention
7 mars 2018
10 >
Messages postés
16372
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
23 juillet 2021

bonjour monsieur merci pour votre aide
je ne comprend pas ce tableau
CD 00 01 11 10
AB
00 R N N B
01 O R1 B1 B
11 V O1R2 B2 B
10 O R1 B1 B
Messages postés
16372
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
23 juillet 2021
2 859
C'est le O en gras qui pose problème ?

A=1, B=0, C=0, D=0, c'est à dire, âge>25, permis<2, contrat<1, accident=0

On est dans ce cas là :
Un conducteur de moins 25 ans et titulaire du permis depuis plus de 2 ans, ou de plus de 25 ans mais titulaire du permis depuis moins de deux ans a le droit au tarif orange s'il n'a jamais provoqué d'accident, au tarif rouge pour un accident, sinon il est refusé.
CD 00 01 11 10
AB
00 R N N B
01 O R1 B1 B
11 V O1R2 B2 B
10 O R1 B1 B

pouvez vous m'expliquez les N SVP
Messages postés
16372
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
23 juillet 2021
2 859
Pourquoi est-ce que tu ne lis pas ce que je marque dans mes réponses ?
Avec R = tarif rouge, O = tarif orange, V = tarif vert, B = tarif bleu, N = refusé.
ok compris
mais j'ai toujours même pb avec tarif bleu
il manques un paramètres peut être?
Messages postés
16372
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
23 juillet 2021
2 859
Là encore c'est une question à laquelle j'ai déjà répondu, c'était même ma première réponse :
Pour prendre en compte ce cas il te manque une information : la date de souscription de l'assuré (et donc son ancienneté)
ok je vais voir merci
bonjour,
merci beaucoup, j'ai compris