Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2729 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  calculatrice flottante en java

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

calculatrice flottante en java

n°1936578
ElFurnytt
Posté le 30-10-2009 à 15:19:35  profilanswer
 

Bonjour,
Je suis nouveau sur ce forum et débutant en programmation java, j'essaye de faire un programme en java mais j'ai un problème.
En fait je voudrais demander deux opérandes à l'utilisateur ainsi que l'opération à effectuer (+ - * /).
La compilation se passe bien mais au moment de rentrer ma première operande, le programme s'arrete et j'ai un message d'erreur qui s'affiche et je ne comprends pas pourquoi.
Le code source de mon programme est le suivant :

 
Code :
  1. /*
  2. * Calculatrice2.java        27/10/2009
  3. * Programme de calcul sur deux opérandes
  4. */
  5.  
  6. // package default
  7. // importation
  8. import java.util.Scanner ;
  9.  
  10. /**
  11. * interaction sur console texte
  12. * operations sur deux opérandes
  13. * @version 1.0
  14. */
  15.  
  16. public class calculatrice2 {
  17.  
  18.    /**
  19.     * E/S sur console avec l'utilisateur
  20.     * addition, soustraction, multiplication, division de deux opérandes
  21.     */
  22.  
  23.    public static void main(String[]args) {
  24.     // examen du tampon d'entree
  25.     Scanner entree = new Scanner(System.in);
  26.     // initialisation des variables
  27.     Float opgauche, opdroit, resultat;
  28.     char operateur;
  29.     String texte;
  30.     // demande à l'utilisateur d'entrer la premiere operande
  31.     System.out.print("Entrez un premier operande :" );
  32.     opgauche = entree.nextFloat();
  33.     // demande à l'utilisateur d'entree l'operateur souhaitée
  34.     System.out.print("Entrez l'operateur souhaitee :" );
  35.     texte = entree.nextLine();
  36.     operateur = texte.charAt(1);
  37.     System.out.print("Entrez un deuxieme operande :" );
  38.     opdroit = entree.nextFloat();
  39.     // calcule et affiche le resultat de l'operation
  40.     if (operateur == '+'){    
  41.         resultat = opgauche+opdroit;
  42.         System.out.print("Le résultat de votre operation est :" +resultat);
  43.     }
  44.     if (operateur == '-'){
  45.         resultat = opgauche-opdroit;
  46.         System.out.print("Le résultat de votre operation est :" +resultat);
  47.     }
  48.     if (operateur=='*'){
  49.         resultat = opgauche*opdroit;
  50.         System.out.print("Le résultat de votre operation est :" +resultat);
  51.     }
  52.     if (operateur == '/'){
  53.         resultat = opgauche/opdroit;
  54.         System.out.print("Le résultat de votre operation est :" +resultat);
  55.     }
  56.    }
  57. }
 

Merci d'avance aux courageux qui lirons et/ou répondrons à mon message  :)


Message édité par Harkonnen le 30-10-2009 à 15:51:02
mood
Publicité
Posté le 30-10-2009 à 15:19:35  profilanswer
 

n°1936581
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 30-10-2009 à 15:52:36  profilanswer
 

1. J'ai édité ton message pour mettre le code entre balises, ce qui le rend plus lisible. Si tu repostes du code, utilise ces balises pour la lisibilité.
 
2. Ca serait bien que tu mettes le message d'erreur stp.


---------------
J'ai un string dans l'array (Paris Hilton)
n°1936582
ElFurnytt
Posté le 30-10-2009 à 15:58:33  profilanswer
 

Harkonnen a écrit :

1. J'ai édité ton message pour mettre le code entre balises, ce qui le rend plus lisible. Si tu repostes du code, utilise ces balises pour la lisibilité.
 
2. Ca serait bien que tu mettes le message d'erreur stp.


 
Désolé pour l'oubli, j'y penserai la prochaine fois  :)  
 
Alors le message d'erreur est le suivant :
 
Entrer l'operation souhaitee :Exception in thread "main" java.lang.StringIndexOu
tOfBoundsException: String index out of range: 1
            at java.lang.String.charAt(String.java:686)
            at calculatrice2.main(calculatrice2.java:36)
 
Pourriez vous m'aider ?  :??:

n°1936583
masklinn
í dag viðrar vel til loftárása
Posté le 30-10-2009 à 16:05:07  profilanswer
 

En Java (comme dans la majorité des langages), les collections (y compris les strings, qui sont des collections de caractères) sont indexées à 0, non à 1.


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1936584
ElFurnytt
Posté le 30-10-2009 à 16:08:54  profilanswer
 

masklinn a écrit :

En Java (comme dans la majorité des langages), les collections (y compris les strings, qui sont des collections de caractères) sont indexées à 0, non à 1.


 
Merci, donc si je remplace operateur = texte.charAt(1); par operateur = texte.charAt(0); cela devrait marcher normalement ?
Mais je ne comprends pas car je viens de tester et j'ai toujours le même message d'erreur !  :sweat:

n°1936585
fred777888​999
Posté le 30-10-2009 à 16:11:22  profilanswer
 

Essaye plutot de mettre du texte (operande) dans des textes et pas des flotants.

n°1936586
ElFurnytt
Posté le 30-10-2009 à 16:18:54  profilanswer
 

fred777888999 a écrit :

Essaye plutot de mettre du texte (operande) dans des textes et pas des flotants.


 
C'est à dire que je dois remplacer Float opgauche, opdroit, resultat; par String opgauche, opdroit, resultat; ? Je viens d'essayer (en remplaçant nextFloat par nextLine également) mais le compilateur me donne 3 erreurs : les operateurs - * / ne peuvent pas être appliqués sur java.lang.String,java.lang.String .   :??:


Message édité par ElFurnytt le 30-10-2009 à 16:19:57
n°1936587
masklinn
í dag viðrar vel til loftárása
Posté le 30-10-2009 à 16:19:31  profilanswer
 

ElFurnytt a écrit :

Merci, donc si je remplace operateur = texte.charAt(1); par operateur = texte.charAt(0); cela devrait marcher normalement ?
Mais je ne comprends pas car je viens de tester et j'ai toujours le même message d'erreur !  :sweat:


Personnellement je ne passerais pas par ce genre de trucs de toute façon, j'utiliserais String.trim() et je ferais mon dispatch directement sur texte (renommé operator).
 
Avec les opérations stockées dans une Map pour avoir quelque chose de plus extensible, et probablement pas une query pour chaque opérande et pour l'opération.


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1936589
ElFurnytt
Posté le 30-10-2009 à 16:22:25  profilanswer
 

masklinn a écrit :


Personnellement je ne passerais pas par ce genre de trucs de toute façon, j'utiliserais String.trim() et je ferais mon dispatch directement sur texte (renommé operator).
 
Avec les opérations stockées dans une Map pour avoir quelque chose de plus extensible, et probablement pas une query pour chaque opérande et pour l'opération.


 
Tu as surement raison, le problème c'est que je suis actuellement en première année de DUT informatique et le programme que j'essaye de faire est un exercice et nous n'avons pas vu String.trim() ni ce qu'était une Map, donc je suis coincé.

n°1936591
ElFurnytt
Posté le 30-10-2009 à 16:37:21  profilanswer
 

Est ce que quelqu'un aurait une solution à mon problème ?

mood
Publicité
Posté le 30-10-2009 à 16:37:21  profilanswer
 

n°1936592
masklinn
í dag viðrar vel til loftárása
Posté le 30-10-2009 à 16:38:21  profilanswer
 

ElFurnytt a écrit :


 
Tu as surement raison, le problème c'est que je suis actuellement en première année de DUT informatique et le programme que j'essaye de faire est un exercice et nous n'avons pas vu String.trim() ni ce qu'était une Map, donc je suis coincé.


Et il vous est interdit de réfléchir ou de faire des recherches?


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1936593
ElFurnytt
Posté le 30-10-2009 à 16:42:11  profilanswer
 

masklinn a écrit :


Et il vous est interdit de réfléchir ou de faire des recherches?


 
Ben en fait j'ai un professeur très strict (par exemple interdiction d'utiliser notepad et obligation d'utiliser le bloc note...) et on n'a pas le droit d'utiliser des choses que l'on n'a pas vu en cours !

Message cité 1 fois
Message édité par ElFurnytt le 30-10-2009 à 16:42:34
n°1936596
masklinn
í dag viðrar vel til loftárása
Posté le 30-10-2009 à 16:46:35  profilanswer
 

ElFurnytt a écrit :

 

Ben en fait j'ai un professeur très strict (par exemple interdiction d'utiliser notepad et obligation d'utiliser le bloc note...)


 [:lectrodz]

ElFurnytt a écrit :

et on n'a pas le droit d'utiliser des choses que l'on n'a pas vu en cours !


[:pingouino]

 

(sinon, tu devrais je pense aller lire la doc de Scanner, contrairement à ce que tu penses il ne fonctionne pas ligne par ligne)

Message cité 1 fois
Message édité par masklinn le 30-10-2009 à 16:48:50

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1936598
ElFurnytt
Posté le 30-10-2009 à 17:01:16  profilanswer
 


 

masklinn a écrit :


[:pingouino]
 
(sinon, tu devrais je pense aller lire la doc de Scanner, contrairement à ce que tu penses il ne fonctionne pas ligne par ligne)


 
Ok, merci du conseil. Sinon tu n'as pas d'idée concernant le non fonctionnement de mon programme ?

Message cité 2 fois
Message édité par ElFurnytt le 30-10-2009 à 17:01:33
n°1936600
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 30-10-2009 à 17:42:32  profilanswer
 

ElFurnytt a écrit :

 

Ok, merci du conseil. Sinon tu n'as pas d'idée concernant le non fonctionnement de mon programme ?


Masklinn t'a aiguillé, c'est pas nextLine() qu'il faut employer à la ligne 35. c'est tout ce que je te dirais, à toi de chercher le reste.

 

edit: et n'oublie pas de mettre l'indice à 0 pour charAt()


Message édité par Harkonnen le 30-10-2009 à 17:43:20

---------------
J'ai un string dans l'array (Paris Hilton)
n°1936601
masklinn
í dag viðrar vel til loftárása
Posté le 30-10-2009 à 17:42:57  profilanswer
 

ElFurnytt a écrit :


 
Ok, merci du conseil. Sinon tu n'as pas d'idée concernant le non fonctionnement de mon programme ?


Oui, c'est pour cette raison que je t'ai suggéré d'aller voir comment fonctionne Scanner (tu devrais jouer un peu avec dans des programmes de test séparés afin de bien comprendre comment cette classe se comporte)


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1936604
ElFurnytt
Posté le 30-10-2009 à 17:52:19  profilanswer
 

Merci à vous deux, je vais chercher :)

n°1936607
ElFurnytt
Posté le 30-10-2009 à 18:04:55  profilanswer
 

Alors, je pense que j'ai trouvé ; j'ai remplacé -ligne35- nextline() par next() et cela fonctionne correctement.  
Donc si je comprends bien, lorsque j'écris next() cela extrait les caractères jusqu'au prochain séparateur ce qui n'est pas le cas avec nextLine() qui prenait en compte la ligne suivante ce qui me faisait tout planter ?

Message cité 1 fois
Message édité par ElFurnytt le 30-10-2009 à 18:13:18
n°1936608
masklinn
í dag viðrar vel til loftárása
Posté le 30-10-2009 à 18:23:17  profilanswer
 

ElFurnytt a écrit :

Alors, je pense que j'ai trouvé ; j'ai remplacé -ligne35- nextline() par next() et cela fonctionne correctement.
Donc si je comprends bien, lorsque j'écris next() cela extrait les caractères jusqu'au prochain séparateur ce qui n'est pas le cas avec nextLine() qui prenait en compte la ligne suivante ce qui me faisait tout planter ?


C'est ça. Dans Scanner, toutes les méthodes type next* (next, nextInt, nextFloat, etc…) te renvoient le token suivant (qui est donc tout le contenu jusqu'au prochain séparateur)*… sauf nextLine qui renvoie le reste de la ligne courante (sans le séparateur de lignes, donc ton nextLine renvoyait une chaîne vide, le restant de la ligne suivant l'entrée de ton opérande gauche).

 

*: sauf si tu utilises un pattern e.g. dans next(), auquel cas ça renvoie conditionnellement le token suivant: uniquement si le token matche le pattern demandé


Message édité par masklinn le 30-10-2009 à 18:23:53

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1936610
ElFurnytt
Posté le 30-10-2009 à 18:32:00  profilanswer
 

Merci, au moins je m'en souviendrai et cela m'évitera de répéter cette erreur, en tout cas merci beaucoup de votre aide, bonne soirée :)

n°1936670
Joel F
Real men use unique_ptr
Posté le 31-10-2009 à 08:54:55  profilanswer
 

c'est ou le dut que j'y envoie pas mes gamins ?

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  calculatrice flottante en java

 

Sujets relatifs
MSN sous javaexpression reguliere java / ant
[Java] binding objet JAVA -> XML pour Datasource GWTDebutant Struts2 - Eclipse for Java EE ou Lomboz ?
Interop C# - Java via Com4jInterop C# - Java via Com4j
Ecrire un client qui se connecte a une socket & java.nio[JAVA] Random dans un pattern
aide java: programmation d'une boite a rythme1er Programme JAVA
Plus de sujets relatifs à : calculatrice flottante en java


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR