Algorithme , Java

Résolu
Bonjour, voilà Je suis actuellement sur un mini Programme qui consiste a demandé à un utilisateur d'entré un jours (compris entre 1 et 31 ) et un mois ( compris entre 1 et 12) , Ensuite une fois que le jours et le mois souhaités sont entrés je demande a l'utilisateur de dire à quelle saison correspond cette date , Si la saison entré == a la saison Correcte mon programme affiche "Très bien " dans le cas contraire il affiche "Non c'était" + saison Correcte. Mais c'est là que mon programme présente des défauts à chaque fois il affiche "Non c'était "+ saison Correcte , Bien que La saison entré correspond a la saison Correcte du coup je soupçonne l'égalité entre saison et saison Correcte d’être derrière tout sa . Pouvez-vous m'éclaircir a ce sujet ?

2 réponses

  1. Salut,

    Tu utilises des classes?
    1. Merci de vote réponse ! Des classes compris par la javaDoc vous voulez dire ?
    2. Si c'est le cas non , tout est fait sur une seule et même classe , j'ai pas fait d'import si ce n'est le Scanner , pour pouvoir entré le choix de l'utilisateur. Merci pour votre réponse en tout cas , en ayant regardé de plus près j'ai compris mon erreur et j'en tire une leçon a ne surtout pas négliger en programmation : " La plus part des langage de programmation , sont Sensibles à la Casse !! "
    3. Peux-tu me donner la ligne qui compare ce qu'entre l'utilisateur et le mois inscris dans le code.
    4. La comparaison je l'effectue simplement pour les 2 chaîne de caractère , En gros c'est sa String saisonCorrecte ="Hiver";
      String saison = scanner.nextLine();
      if(saison.equals(saisonCorrecte)){
      System.out.println(" Très bien vous avez Trouvez la bonne saison ");
      } else{
      System.out.println(" Non C'était la saison :" + saisonCorrecte);
      }
    5. du coup dans mon branchement conditionnel, j'effectue une comparaison de 2 String , C'est la seule comparaison que j'effectue dans mon programme , quant au mois je l'ai mis dans un switch case du coup chaque entier entré correspond a mois , en gros sa donne sa

      switch (mois){
      case 1 : System.out.println("Janvier");
      case 2 : System.out.println(" Fevrier");
      ...

      }

      jusqu’à ce que les 12 mois soient entré
  2. Modérateur
    Bonjour,

    "Si la saison entré == a la saison Correcte"
    La comparaison de deux objets avec == recherche une égalité "physique" entre ces deux objets, est-ce que c'est exactement le même objet ou non, mais dans la plupart des cas ce dont a besoin c'est de comparer les valeurs des objets, est-ce que la valeur est la même que l'autre.

    C'est pour cela qu'il faut utiliser la méthode equals() et non l'opérateur ==

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("Ecrire 'toto' : ");
        String line = sc.nextLine();
        System.out.println("line == 'toto'\t\t"+(line == "toto")); // false
        System.out.println("line.equals('toto')\t"+line.equals("toto")); // true
    }
    1. Bonjours , Oui c'est ce que j'avais fait mais en fait dans mon String saisonCorrecte = 'Hiver" par exemple il y'avais un espace du coup lors de ma comparaison avec mon String saison , le programme affichait constamment que les String était != a cause de l'espace justement , Je ne savais pas que les langages de programmations était autant sensible a la casse en même temps comme c'était une comparaison de 2 String fallait s'y attendre a sachant que même un espace est considéré comme un caractère .
    2. Modérateur
      Les String en Java représentent de l'UTF-16, soit potentiellement 1 million de caractères différents...

      Par exemple il y a une centaine de lettres "A" différentes (
      A
      ,
      a
      ,
      à
      ,
      â
      ,
      ä
      ,
      ã
      ...) donc oui deux caractères sont différents à la casse près.

      En revanche, il est possible de nettoyer les String pour supprimer les espaces et les comparer sans prendre en compte la casse. Exemple :

      String s1 = "     abc  ";
      String s2 = "  ABC   ";
      System.out.println(s1.trim().equalsIgnoreCase(s2.trim())); // true
    3. @KXDu coup est il possible de comparé plusieurs String soit par exemple String s1 = "Hiver" , String s2 ="hiver" , String s3 ="hiVer" ... Sans que lors de la comparaison le programme ne prennent en compte les majuscules , minuscules ... et qu'il arrive a considéré que "Hiver".equals(hiVER) ?
    4. Modérateur
      Oui et c'est exactement ce que fait mon exemple avec "abc" et "ABC"...
    5. Mais du coup faudra crée autant de variable que de cas possible du mot "Hiver" par exemple : Y'a pas une instruction qui permet de couvrir tout les cas possible simplement en prenant en compte qu'une seule variable ?