IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

Problème avec ma boucle while


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2013
    Messages : 23
    Par défaut Problème avec ma boucle while
    Bonjour tout le monde,

    Je me mets à apprendre Java. J'ai trouvé un tutoriel sympa. Dedans, il y a un exrecice : il faut faire un programme qui convertie les températures celsius/fahrenheit.

    J'ai fait un programme :
    1/ Qui demande quel unité est à transformer,
    2/ Qui demande combien de degré sont à convertir
    3/ Donne la température convertie
    4/ Demande si une autre conversion est à effectuer

    Ca marche bien. Sauf que si je dis à mon programme qu'il faut en faire une autre, il ne veut pas. Pour programmer ça j'ai mis une boucle while au début : j'initialise a (string) en oui, tant que a vaut oui, effectue le programme, à la fin lorsque tu demandes à l'utilisateur s'il veut faire une autre conversion, mets dans a sa réponse.

    Et il ne veut pas recommencer si on mets oui, pourtant a vaut bien oui, j'ai vérifier, pouvez-vous m'aider ?

    Ci-dessous, le programme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    package projet1;
     
    import java.util.Scanner;
     
    public final class Class1 {
     
         public static void main(String[] args) {
     
         String a="oui";
     
              while (a=="oui")
              {	
              Scanner ss = new Scanner(System.in);
              System.out.println("Que voulez-vous convertir ?");
              String sens = ss.nextLine();
     
                   switch (sens)
                   {
                   case "celsius":
                        Scanner b=new Scanner(System.in);
                        System.out.println("Combien de celsius ?");
                        float deg = b.nextFloat();
                        deg = (float)1.8 * deg + 32;
                        System.out.println(deg + " fahrenheit");
                        break;
                   case "fahrenheit":
                        Scanner c=new Scanner(System.in);
                        System.out.println("Combien de fahrenheit ?");
                        float fah = c.nextFloat();
                        fah = (fah - 32)/(float) 1.8;
                        System.out.println(fah + " celsius");
                        break;
                   }
     
              Scanner der = new Scanner(System.in);
              System.out.println("Voulez-vous effectuer une autre conversion ?");
              a = der.nextLine();
              }
     
         }
     
    }
    A mon avis, c'est que je fais n'importe quoi avec Scanner...

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    il faut utiliser equals pour comparer des objets (et donc des String). == ne fait que vérifier que c'est la même instance.


  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2013
    Messages : 23
    Par défaut
    Ca marche ! Merci beaucoup !

    Encore une petite précision (pour voir si j'ai bien compris):
    Si == vérifie juste que c'est la même instance ; lorsqu'on l'utilise avec des objets, la seul manière d'obtenir true, c'est
    (où x est un objet ?)
    c'est bien ça ?

    Enfin, pour les types primitifs, si on peut utiliser == pour les boucles while, cela veut donc dire que si l'on tape :
    b est juste un nouveau nom de l'instance 1 des integer ?

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    x==y vérifie que ce qui est dans la variable x est la même valeur que ce qui est dans la variable y.

    si x et y sont des int, alors on vérifie donc que les valeurs des int sont les même.

    si x et y sont des références vers des objets, alors on vérifie que les références sont les même.

    donc si tu as

    String x = "123"; et String y = x; alors x==y vaut true. Car on a copié la référence contenu dans x vers la variable y, les références sont les mêmes (x et y référencent la même instance de String).

    Il faut bien comprendre en java que tu as

    String x

    c'est une variable x destiné à contenir la référence vers un objet de type String. On ne stocke jamais l'objet en java, toujours la référence (contrairement au C++ où on peux faire les deux).

  5. #5
    Membre Expert
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Par défaut
    <non technique>
    comme quoi les idées se répandent: la conversion Celsius/farenheit est un exercice qui est dans mes tutoriaux depuis 15 ans! (tu n'aurais pas, par hasard, une copie d'un de mes cours )
    autre remarque non technique: ton pseudo est celui de mon petit-fils (mais là j'en suis sûr tu n'es pas mon petit-fils -il fait du mindstorm pas du java-)
    </non technique>

  6. #6
    Membre averti
    Homme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2013
    Messages : 23
    Par défaut
    Holala... C'est terriblement brumeux pour le moment les "instances"/"références"...
    Une dernière tentative pour voir si je comprends, après je laisse tomber pour le moment.


    Lorsque je fais :
    a est une instance de la classe String, c'est à dire un objet "chaine de caractère" contenant les trois caractères o, u et i concaténés, c'est bien ça ?

    Mais tu dis que l'on ne stocke jamais l'objet, mais la référence. Pour moi, la référence c'était un peu " l'adresse postale " dans la mémoire du contenu d'un objet.

    C'est à dire qu'un objet est défini entièrement par sa classe et sa référence ?
    Et lrosque tu dis que l'on ne stocke pas l'objet, cela veut dire qu'il n'y pas dans la mémoire un truc du genre a="oui", mais plutôt un truc du genre a est un String dont le contenu se trouve là-bas.

    Ainsi, pour les variables de types primitifs == marchent parce que dans ce cas là, les variables renvoient directement à leur valeurs; et pour les objets, == marche uniquement si les deux objets sont de même classe et ont la même référence. Est-ce que c'est ça ?

  7. #7
    Membre averti
    Homme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2013
    Messages : 23
    Par défaut
    OK, c'est plus clair.
    Merci à tous pour vos réponses !

    @ professeur shadoko : j'ai dis que je débutais java. Peut être que gautgaut, votre petit fils, se mets à java âpres mindstorm...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème avec des boucles while/for imbriquées
    Par Nico820 dans le forum Général Python
    Réponses: 12
    Dernier message: 14/12/2012, 16h24
  2. Problème avec une boucle de type Do While =>Loop
    Par Runsh63 dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 23/09/2011, 08h53
  3. Problème avec deux boucles do whiles imbriquées
    Par breizh297 dans le forum Fortran
    Réponses: 1
    Dernier message: 15/11/2010, 08h37
  4. [AC-2003] Problème avec ma boucle Do While
    Par maw59 dans le forum VBA Access
    Réponses: 1
    Dernier message: 18/03/2010, 11h21
  5. [AC-2007] Probléme avec une boucle DO While
    Par theBinette dans le forum VBA Access
    Réponses: 2
    Dernier message: 12/02/2010, 17h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo