String "1+1" zu double

pzypher

Aktives Mitglied
Hallo,

ich weiß grundsätzlich wie man Datentypen konvertiert (oder dachte ich weiß es), jedoch hab ich hier ein Problem:

Java:
        String a = "1+1";

        double d;

        d = Double.parseDouble(a);

        System.out.println(d);

Exception in thread "main" java.lang.NumberFormatException: For input string: "1+1"
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1242)
at java.lang.Double.valueOf(Double.java:492)

Wenn ich nur "1" als String hätte, würds ja gehen. Aber wie schauts mit einer Berechnung aus?
 

HimBromBeere

Top Contributor
"1+1" ist halt erstmal nur eine Zeichenkette.

Einen Taschenrechner zu programmieren, ist nicht ganz so trivial wie du es hier schreibst. Du musst schon die verschiedenen Operanden und Operatoren getrennt einlesen, also dir einen Kopf machen, wie du das Plus-Zeichen einliest, welche Bexeutung eine Zahl innerhalb der Zeichenkette hat...
 

XHelp

Top Contributor
Wenn du
Code:
1+1
zu
Code:
2
machen, willst, dann musst du richtung Funktionsparser suchen. Es gibt hier im Forum einige Themen dazu
 

pzypher

Aktives Mitglied
Richtig, es soll ein kleiner Taschenrechner inkl. GUI werden. Habs auch schon hinbekommen (Operand1/2 + Operation aus dem String mit Schleifen auslesen), aber ich dachte mir halt es geht sicherlich eleganter.

Java:
/*
* Code ist nicht vollständig (GUI etc. fehlt)
* 
*/

    double operand1;
    double operand2;
    int stringIndex = 0;

    String ausgabeValue = "";
    String op1 = "";
    String op2 = "";
    //ausgabe = jTextField


    char operation = 'x';

    private void resultButtonActionPerformed(java.awt.event.ActionEvent evt) {

        while(true) {

            ausgabeValue = ausgabe.getText();

            /*
             * Behandelt den Fall wenn Vorzeichen im Ausdruck sind
             */
            if(ausgabeValue.charAt(stringIndex)=='-' || ausgabeValue.charAt(stringIndex)=='+' ) {
                op1+=ausgabeValue.charAt(stringIndex);
                stringIndex++;
            }

            /*
             * Behandelt den Fall wenn keine Operation im Ausdruck ist (Fehlermeldung)
             */
            if(!ausgabeValue.contains("+") & !ausgabeValue.contains("-") & !ausgabeValue.contains("*") & !ausgabeValue.contains("/")) {
                JOptionPane.showMessageDialog(this, "Fehlerhafter Ausdruck!","Fehler", JOptionPane.ERROR_MESSAGE);
                ausgabe.setText(null);
                ausgabeValue = null;
                break;
            }

            /*
             * Zerlegt den String in Operand 1 (=String)
             */
            while(ausgabeValue.charAt(stringIndex)!='+' & ausgabeValue.charAt(stringIndex)!='-' & ausgabeValue.charAt(stringIndex)!='*' & ausgabeValue.charAt(stringIndex)!='/' ) {
                op1+=ausgabeValue.charAt(stringIndex);
                stringIndex++;
            }

            /*
             * Umwandlung von Op1 (=String) zu Operand1 (=double)
             */
            try {
            operand1 = Double.parseDouble(op1);
            } catch (java.lang.NumberFormatException op1) {
                JOptionPane.showMessageDialog(this, "Fehlerhafter Ausdruck!","Fehler", JOptionPane.ERROR_MESSAGE);
                ausgabe.setText(null);
                ausgabeValue = null;
                break;
            }

            operation = ausgabeValue.charAt(stringIndex);
            stringIndex++;

            /*
             * Übermittelt den restlichen String nach Op1 (=String)
             */
            for(;stringIndex < ausgabeValue.length(); stringIndex++) {
                op2 += ausgabeValue.charAt(stringIndex);
            }

            /*
             * Umwandlung von Op2 (=String) zu Operand2 (=double)
             */
            try {
            operand2 = Double.parseDouble(op2);
            } catch (java.lang.NumberFormatException op2) {
                JOptionPane.showMessageDialog(this, "Fehlerhafter Ausdruck!","Fehler", JOptionPane.ERROR_MESSAGE);
                ausgabe.setText(null);
                ausgabeValue = null;
                break;
            }

            /*
             * Entscheidung welche Rechenoperation ausgeführt wird
             */

                    switch(operation) {
                    case '+':
                        ausgabe.setText(String.valueOf(operand1+operand2);
                        break;
                    case '-':
                        ausgabe.setText(String.valueOf(operand1-operand2));
                        break;
                    case '*':
                        ausgabe.setText(String.valueOf(operand1*operand2));
                        break;
                    case '/':
                        if(operand2!=0) {
                            ausgabe.setText(String.valueOf(operand1/operand2));
                            break;
                        }
                        else {
                            JOptionPane.showMessageDialog(this, "Durch 0 darf nicht dividiert werden!","Fehler", JOptionPane.ERROR_MESSAGE);
                            break; }
                    default:
                            break;
                }
                    break;
        }

        stringIndex = 0;
        ausgabeValue = ausgabe.getText();
        op1 = "";
        op2 = "";
        
    }
 
Zuletzt bearbeitet:

timbeau

Gesperrter Benutzer
Eine Konvertierung beinhaltet keine Logik sondern nur eine Änderung der "Schablone" wie der Wert zu sehen ist. Z.B. "1" + "1" = "11".
 

ARadauer

Top Contributor
oder von JavaScript machen lassen....
Java:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
public class Rechner {
 
 public static void main(String[] args) throws IOException {
  BufferedReader r = new BufferedReader(new InputStreamReader(System.in));
  
  System.out.print("Formel eingeben: ");
  String formel = r.readLine();
         ScriptEngineManager factory = new ScriptEngineManager();
         ScriptEngine engine = factory.getEngineByName("JavaScript");
          
        
         try {
    engine.eval("var v = eval('"+formel+"')");
    double b =(Double) engine.get("v");

          System.out.println("Ergebnis: "+b);
   } catch (ScriptException e) {
    System.out.println("Das war wohl nix");
    e.printStackTrace();
   }       
        
     }
 }
 

AquaBall

Top Contributor
Und von der anderen Seite betrachtet:

Double.parseDouble(a) macht eine Zahl aus einem String,
Tut also was es sagt: "macht eine Zahl."
Da steht nirgends was von: "führt Berechnungen aus."

Und weil "1+1" keine gültige Zahl ist kann der Parser nicht damit machen.
Eine Zahl besteht ausschließlich aus Ziffer, und evtl 1 einzigen ".", sonst nichts.
 

vimar

Bekanntes Mitglied
Also ich würds so machen:

mit einem StringTokenizer.

Java:
String a = "1+1+23-5+23-12+34";

String temp;
ArrayList <Double> ZahlenListe = new ArrayList();
ArrayList <String>  PlusMinusMalDurchListe =  new ArrayList();


StringTokenizer StrToKen = new StringTokenizer(a);

while (StrToKen.hasMoreTokens()){
   temp = StrToKen.nextToken();
       
       if(temp.equals("+")) PlusMinusMalDurchListe.add("+");
       else if(temp.equals("-")) PlusMinusMalDurchListe.add("-");
        else if(temp.equals("*")) PlusMinusMalDurchListe.add("*");
        else if(temp.equals("/")) PlusMinusMalDurchListe.add("/");
        else { // ist ne zahl dann -.-
            ZahlenListe.add(Double.parseDouble(temp));
           }

}

// jetzt hätten wir 2 arraylisten
        
      int ZahlenCounter= 0;
      int operationCounter=0;

// hier jetzt ne for schleife für die arraylisten in dem sinne

if (PlusMinusMalDurchListe.get(0).equals("+") additionsMethode(ZahlenListe.get(0),ZahlenListe.get(1)); // usw


:p
 

pzypher

Aktives Mitglied
Danke für eure Antworten.

Hab noch 2 Fragen:

Das Javascript von ARadauer ist ja um einiges kürzer (und eleganter?) als meine bzw. die von vimar, gibts da irgendwelche Nachteile bei der Verwendung von JS bzw. worauf muss man aufpassen wenn man dies verwendet?

Warum gibts eine solche Funktion

Java:
engine.eval("var v = eval('"+formel+"')");

nicht auch bei Java?
 

AquaBall

Top Contributor
Mit JavaScript schreibst du halt keine Programme, sondern nur einen Stapel an Befehlen.

Das hat zwar schon ein Bisschen mit Programmieren zu tun, aber das Ergebnis ist kein Programm.
Da bist du weit davon entfernt ein Programmierer zu sein.

Aber wenn es deine Anforderungen reicht, dann mach es so.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Avalon String in Double bzw. Währung konvertieren Java Basics - Anfänger-Themen 6
L ArrayList<String> --> double[] array Java Basics - Anfänger-Themen 18
D Methode mit Übergabe double und Rückgabe String Java Basics - Anfänger-Themen 2
B Rückgabe von zwei Werten: String und double Java Basics - Anfänger-Themen 14
M Konvertierung String -> double Java Basics - Anfänger-Themen 8
J String, Int und double Array sortieren Java Basics - Anfänger-Themen 16
L Konvertieren von String zu double?! Java Basics - Anfänger-Themen 6
geekex Double zu String umwandeln in einer Methode Java Basics - Anfänger-Themen 28
T Input/Output Double und String als Eingabe einlesen Java Basics - Anfänger-Themen 9
Hijo2006 String to Double Java Basics - Anfänger-Themen 4
K Operatoren The Operator * is undefined for the argument type(s) double, String Java Basics - Anfänger-Themen 4
das_leon String zu double konventieren Java Basics - Anfänger-Themen 1
A Erste Schritte Double Wert aus String zu int Java Basics - Anfänger-Themen 2
M Datentypen Ergebniss- Double to String- wird nicht angezeigt Java Basics - Anfänger-Themen 13
OnDemand Datentypen Double to String Java Basics - Anfänger-Themen 10
V Variablen String zu Double, Merkwürdiger Fehler Java Basics - Anfänger-Themen 6
S Datentypen Ein String in ein Char und ein Double wandeln Java Basics - Anfänger-Themen 2
A String in Double umwandeln mit Tests Java Basics - Anfänger-Themen 3
O Datentypen double in string über fileWriter... Java Basics - Anfänger-Themen 7
J String zu Double parsen (multiple points) Java Basics - Anfänger-Themen 2
jueki Präzision bei Typumwandlung zwischen double und String Java Basics - Anfänger-Themen 14
F Textfeld: String (x,xx) --> double Java Basics - Anfänger-Themen 8
A x: String oder double Java Basics - Anfänger-Themen 9
W Datentypen double in String umwandeln Java Basics - Anfänger-Themen 2
N Umwandlung String - double für mehrdimensionalen array Java Basics - Anfänger-Themen 2
V Datentypen Methode gesucht, String zu Double mit Rechenoperatoren Java Basics - Anfänger-Themen 11
E Test, ob String in Double umwandelbar ist Java Basics - Anfänger-Themen 3
N String in Double konvertieren? Java Basics - Anfänger-Themen 9
D Datentyp: Liste von String->Double dingern Java Basics - Anfänger-Themen 4
A Double-String -> Integer-String Java Basics - Anfänger-Themen 4
S Double to String Exponetialdarstellung Java Basics - Anfänger-Themen 2
D string zu double auswerten (eval!) Java Basics - Anfänger-Themen 3
I Unstimmigkeit bei String-nach-Double-Konvertierung Java Basics - Anfänger-Themen 7
M String+double-Paare speichern? Java Basics - Anfänger-Themen 4
J double oder string in boolean? Java Basics - Anfänger-Themen 3
W String zu double Array Java Basics - Anfänger-Themen 10
F Mehrere Double-Werte aus einem String Java Basics - Anfänger-Themen 3
G String to Double Java Basics - Anfänger-Themen 6
G String in double konvertieren Java Basics - Anfänger-Themen 12
F double/integer in string Java Basics - Anfänger-Themen 7
R Tabelle sortieren, Problem mit Double bzw. String-Werten Java Basics - Anfänger-Themen 5
L String in Double und , in . Java Basics - Anfänger-Themen 5
J String Array in Double Array umwandeln Java Basics - Anfänger-Themen 31
A String in Double Java Basics - Anfänger-Themen 2
S String to double Java Basics - Anfänger-Themen 7
D double zu String Java Basics - Anfänger-Themen 2
P String in double umwandeln Java Basics - Anfänger-Themen 3
S Typumwandlung String zu double? Java Basics - Anfänger-Themen 6
G String in Double umwandeln ! Java Basics - Anfänger-Themen 2
J String to Double Java Basics - Anfänger-Themen 13
richis-fragen String("AT") als StringObject-Variable deklarieren Java Basics - Anfänger-Themen 14
krgewb String mit Datumsangabe in Long umwandeln Java Basics - Anfänger-Themen 2
D String Groß/Kleinschreibung Ignorieren Java Basics - Anfänger-Themen 4
D Map<String, Integer> sortieren und der reinfolge nach die Glieder abfragen Java Basics - Anfänger-Themen 3
J Ähnlichen String in Liste finden Java Basics - Anfänger-Themen 6
Kartoffel_1 String transformation Java Basics - Anfänger-Themen 7
H String-Operation replace() - Zeichenkette verdoppeln Java Basics - Anfänger-Themen 2
K String analysieren Java Basics - Anfänger-Themen 27
Beowend String zu Date parsen Java Basics - Anfänger-Themen 1
Beowend String auf Satzzeichen überprüfen? Java Basics - Anfänger-Themen 6
H Liste nach String-Länge sortieren Java Basics - Anfänger-Themen 1
String in ArrayList umwandeln Java Basics - Anfänger-Themen 1
I Sass Compiler und String erhalten? Java Basics - Anfänger-Themen 7
T Methode akzeptiert String nicht Java Basics - Anfänger-Themen 18
F Arraylist<String>Ein Wort pro Zeile Java Basics - Anfänger-Themen 6
J Schlüsselworte Prüfen, ob ein bestimmtes, ganzes Wort in einem String enthalten ist. Java Basics - Anfänger-Themen 6
N String überprüfen Java Basics - Anfänger-Themen 3
E String zerlegen aus args Java Basics - Anfänger-Themen 1
M Long-Typ in String-Änderung führt zu keinem Ergebnis bei großer Zahl Java Basics - Anfänger-Themen 11
Ostkreuz String Exception Java Basics - Anfänger-Themen 8
W Items löschen aus String Array vom Custom Base Adapter Java Basics - Anfänger-Themen 2
MoxMorris Wie macht man String[] = String[] aus einer anderer Methode? Java Basics - Anfänger-Themen 18
J String Filter Java Basics - Anfänger-Themen 5
S String Array Buchstaben um einen gewissen Wert verschieben Java Basics - Anfänger-Themen 4
R Größter zusammenhängender Block gleicher Zeichen im String Java Basics - Anfänger-Themen 1
XWing Randomizer mit einem String Java Basics - Anfänger-Themen 2
D 2D Char Array into String Java Basics - Anfänger-Themen 2
H Cast von Float nach String klappt nicht Java Basics - Anfänger-Themen 12
I Zerlegen von String Java Basics - Anfänger-Themen 3
B Beliebiger String gegeben Suche Datum in String Java Basics - Anfänger-Themen 6
I String Java Basics - Anfänger-Themen 4
I API - zurückgegebener JSON String lesen und in Entity konvertieren Java Basics - Anfänger-Themen 2
H Zu langen String aufteilen - bequeme Methode? Java Basics - Anfänger-Themen 14
W String einer Textdatei in einzelne Stringobjekte pro Zeile aufteilen Java Basics - Anfänger-Themen 14
belana wie am besten 2D Array von String to Integer Java Basics - Anfänger-Themen 18
J Java To String Methode, Array mit For-Schleife Java Basics - Anfänger-Themen 2
M Kommandozeilenparamter als EINEN String werten Java Basics - Anfänger-Themen 5
M RandomAccessFile int und String gleichzeitig in einer Datei Java Basics - Anfänger-Themen 49
M Prüfen on eine Zahl im String enthalten ist Java Basics - Anfänger-Themen 3
Distanz zwischen zwei Zeichenfolgen in einem String bestimmen Java Basics - Anfänger-Themen 5
Substring in einem String finden Java Basics - Anfänger-Themen 13
BeginnerJava String mit vorgegebener Länge und Buchstaben erzeugen/ mit Leerstellen Java Basics - Anfänger-Themen 8
I Eindeutiger String mit maximaler Anzahl an Zeichen Java Basics - Anfänger-Themen 11
H Interface Wieso "List<String> list = new ArrayList<>[…]" Java Basics - Anfänger-Themen 4
JavaBeginner22 Integer in String umwandeln Java Basics - Anfänger-Themen 7
HolyFUT JSON String in Java Object schreiben - Anführungszeichen rauskriegen? Java Basics - Anfänger-Themen 17
Fodoboo131 RegEx- Umwandlung von String in ausführbares Objekt/ Befehl Java Basics - Anfänger-Themen 9
HolyFUT Input/Output Leerzeichen aus String entfernen - klappt nicht! Java Basics - Anfänger-Themen 13
viktor1 Methoden Methode schreiben static void readText (String filename) {...} zu WordHistogramSample.java Java Basics - Anfänger-Themen 13
ravenz Schleife mit for über String Array „zahlen“und prüfen ob Wert „a“ oder „b“ oder „c“ entspricht (mittels || ) Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben