|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Apr 2007
Messaggi: 144
|
[JAVA] Conversione stringa con operazione aritmetica a valore
Salve a tutti
Calculator.txt.setText(String.valueOf(Double.valueOf((Calculator.txt.getText())))); Ma dà un'infinità di errori ed eccezioni |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Sep 2007
Messaggi: 754
|
Codice:
Calculator.txt.setText(String.valueOf(Double.valueOf((Calculator.txt.getText()))));
__________________
http://www.tevigroup.it/ |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
La conversione è ok: valueOf restituisce effettivamente un double data una stringa che lo rapprenta.
Che errori ti da? |
|
|
|
|
|
#4 | |
|
Member
Iscritto dal: Apr 2007
Messaggi: 144
|
Quote:
4 + 5 - 9 quindi credevo che facendo quelle conversioni uscisse il valore dell'operazione. Lo sterr dà questo Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: "1 + 1" at sun.misc.FloatingDecimal.readJavaFormatString(Unknown Source) at java.lang.Double.valueOf(Unknown Source) at Calculator.ActionListenerEquals.actionPerformed(ActionListenerEquals.java:9) at java.awt.Button.processActionEvent(Unknown Source) at java.awt.Button.processEvent(Unknown Source) at java.awt.Component.dispatchEventImpl(Unknown Source) at java.awt.Component.dispatchEvent(Unknown Source) at java.awt.EventQueue.dispatchEvent(Unknown Source) at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.run(Unknown Source) |
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Sep 2007
Messaggi: 754
|
E no, devi prima eseguire l'operazioni e poi scrivi il risultato in txt
__________________
http://www.tevigroup.it/ |
|
|
|
|
|
#6 |
|
Member
Iscritto dal: Apr 2007
Messaggi: 144
|
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Devi prendere la stringa, separarla nelle diverse parti che compongono l'espressione e poi interpretare la successione di operandi e operatori per comporre il risultato.
Se non ti interessa il meccanismo di valutazione delle espressioni puoi usare uno script engine. Ad esempio: Codice:
import javax.script.*;
public class Main {
public static void main(String[] args) {
String expr = "1 + 10 - 24 * 2";
ScriptEngine engine = new ScriptEngineManager().getEngineByName("javascript");
Object result = null;
try {
result = engine.eval(expr);
} catch(ScriptException ex) {
System.out.println("Errore nella valutazione di: " + expr);
ex.printStackTrace();
}
if(result instanceof Number) {
Number n = (Number)result;
System.out.println(n.doubleValue());
} else {
System.out.println("Che razza di espressione è?");
}
}
}
Tieno conto che passare una stringa ad un motore di script senza alcun controllo è potenzialmente pericoloso (per "engine" non c'è differenza tra una stringa che fa una somma o una che richiede la cancellazione di un file). |
|
|
|
|
|
#8 |
|
Member
Iscritto dal: Apr 2007
Messaggi: 144
|
Peccato, avevo pensate a spezzare la stringa con StringTokenizer, ma mi sembrava troppo macchinoso e speravo ci fosse qualche metodo di libreria che lo facesse per me
|
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Sep 2007
Messaggi: 754
|
Si ma se stai facendo una calcolatrice a scopo didattico non ti conviene usare soluzioni gia pronte
__________________
http://www.tevigroup.it/ |
|
|
|
|
|
#10 |
|
Member
Iscritto dal: Apr 2007
Messaggi: 144
|
|
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Ci sono tanti modi di farlo. Comunque devi separare la stringa in una successione di operandi e operatori. Per il calcolo puoi usare la RPN
http://it.wikipedia.org/wiki/Notazione_polacca_inversa |
|
|
|
|
|
#12 |
|
Senior Member
Iscritto dal: Feb 2007
Città: Verona
Messaggi: 1060
|
Anch'io avevo scritto una calcolatrice che valutava un espressione aritmetica... mai finita davvero.
Comunque dietro a tutto è importante avere un buno progetto UML e la cosa si fa interessante.
__________________
|
|
|
|
|
|
#13 |
|
Member
Iscritto dal: Apr 2007
Messaggi: 144
|
|
|
|
|
|
|
#14 |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
@Attila7849
Se devi fare la calcolatrice per esercizio, sarebbe molto utile che non ti facessi fare i calcoli da una libreria, o come ti ha suggerito PGI dal motore di scripting ECMAScript (javascript) integrato nelle librerie del JDK di JavaSE. Ciò comporta, per esempio, il doverti scrivere le classi che realizzano un analizzatore lessicale per le espressioni aritmetiche e un parser di precedenza degli operatori: molto formativo e interessante, ma senza una base di partenza e non conoscendo nulla degli argomenti mi rendo conto che sia molto dura. Invece con delle buone informazioni alle spalle la cosa è fattibile e potrebbe essere molto didattica. A tale scopo di linko due pagine del sito "Guide Algoritmi" (è pubblicato da un utente di questa sezione del forum) che potranno esserti molto utili secondo me. La teoria è ben illustrata, e l'implementazione pratica (ci sono i sorgenti scaricabili) e gli stralci di codice d'esempio sono in linguaggio C: ma non dovrebbe essere difficile realizzare la cosa anche in Java. I link: - Analizzatore lessicale per espressioni aritmetiche - Operator Precedence Parsing: calcolare il valore di un'espressione aritmetica
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) Ultima modifica di banryu79 : 27-08-2009 alle 10:59. |
|
|
|
|
|
#15 | |
|
Member
Iscritto dal: Apr 2007
Messaggi: 144
|
Quote:
|
|
|
|
|
|
|
#16 |
|
Member
Iscritto dal: Apr 2007
Messaggi: 144
|
Altro piccolo quesito, evito di aprire un nuovo topic.
E' necessario che io studi gli applet, se voglio creare giochi in java non per browser? |
|
|
|
|
|
#17 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
non è necessario. Non che ci sia molto da dire sugli applet.
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 00:51.



















