calculatrice flottante en java - Java - Programmation
Marsh Posté le 30-10-2009 à 15:52:36
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.
Marsh Posté le 30-10-2009 à 15:58:33
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é. |
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 ?
Marsh Posté le 30-10-2009 à 16:05:07
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.
Marsh Posté le 30-10-2009 à 16:08:54
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 !
Marsh Posté le 30-10-2009 à 16:11:22
Essaye plutot de mettre du texte (operande) dans des textes et pas des flotants.
Marsh Posté le 30-10-2009 à 16:18:54
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 .
Marsh Posté le 30-10-2009 à 16:19:31
ElFurnytt a écrit : Merci, donc si je remplace operateur = texte.charAt(1); par operateur = texte.charAt(0); cela devrait marcher normalement ? |
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.
Marsh Posté le 30-10-2009 à 16:22:25
masklinn 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é.
Marsh Posté le 30-10-2009 à 16:37:21
Est ce que quelqu'un aurait une solution à mon problème ?
Marsh Posté le 30-10-2009 à 16:38:21
ElFurnytt a écrit : |
Et il vous est interdit de réfléchir ou de faire des recherches?
Marsh Posté le 30-10-2009 à 16:42:11
masklinn 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...) et on n'a pas le droit d'utiliser des choses que l'on n'a pas vu en cours !
Marsh Posté le 30-10-2009 à 16:46:35
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...) |
ElFurnytt a écrit : et on n'a pas le droit d'utiliser des choses que l'on n'a pas vu en cours ! |
(sinon, tu devrais je pense aller lire la doc de Scanner, contrairement à ce que tu penses il ne fonctionne pas ligne par ligne)
Marsh Posté le 30-10-2009 à 17:01:16
masklinn a écrit : |
Ok, merci du conseil. Sinon tu n'as pas d'idée concernant le non fonctionnement de mon programme ?
Marsh Posté le 30-10-2009 à 17:42:32
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()
Marsh Posté le 30-10-2009 à 17:42:57
ElFurnytt a écrit : |
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)
Marsh Posté le 30-10-2009 à 18:04:55
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 ?
Marsh Posté le 30-10-2009 à 18:23:17
ElFurnytt a écrit : Alors, je pense que j'ai trouvé ; j'ai remplacé -ligne35- nextline() par next() et cela fonctionne correctement. |
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é
Marsh Posté le 30-10-2009 à 18:32:00
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
Marsh Posté le 30-10-2009 à 15:19:35
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 :
Merci d'avance aux courageux qui lirons et/ou répondrons à mon message
Message édité par Harkonnen le 30-10-2009 à 15:51:02