Character umwandeln als Double Werte

Diskutiere Character umwandeln als Double Werte im Java Basics - Anfänger-Themen Bereich.
F

Fynn

hallo! ich habe ein Stack Programm welches mir eine Rechenoperation durchführt, ich habe dafür die Klasse stack verwendet und ein Input an zahlen als char mitgegeben. Bspw: (8*2)+2/((4/2)*3) und nach jeder Operation wieder aufgestapelt und zwischen gespeichert bis ich keinen char mehr habe. Wenn ich keinen mehr habe dann soll das Ergebnis draufgestapelt und umgewandelt und ausgegeben werden. Jedoch müsste ich das jetzt irgendwie auf ein double wert umwandeln. Das geht so:
Code:
 stack.push(Double.valueOf(String.valueOf(s)));
Wieso muss ich es zuerst in ein String umwandeln und danach erst in ein Double wert? Kann mir das jemand erklären? Und wieso muss ich das überhaupt alles umwandeln? Kann ich das Ergebnis nicht einfach mit der Zwischenspeicher variable ausgeben? Ich weiss sind dumme fragen aber ich will das im Detail verstehen könne und im internet finde ich nichts spezifisch dazu.. Danke schon mal
 
mihe7

mihe7

Wenn Du Fragen zu Code hast, musst Du den Code schon posten. So wissen wir noch nicht mal was s ist. Außerdem verstehe ich Deine Beschreibung nicht, da fehlen vermutlich einige Infos, die man im Code finden würde.
 
F

Fynn

Wenn Du Fragen zu Code hast, musst Du den Code schon posten. So wissen wir noch nicht mal was s ist. Außerdem verstehe ich Deine Beschreibung nicht, da fehlen vermutlich einige Infos, die man im Code finden würde.
Hier ist ein kleiner Teil der die Verständnis fragen lösen sollte:

Java:
   In digits = new In(args[0]);
        Stack <Double> stack = new Stack<Double>();
        double result;

        while(digits.hasNextChar()){
            Character s = digits.readChar();

            if(s.equals('-')){
                double a = stack.pop();
                double b = stack.pop();
                stack.push(b - a);
            
                
            }else{

                stack.push(Double.valueOf(String.valueOf(s)));
            }
        }

        result = stack.pop();
        System.out.println("Das Ergebnis: " + result);
    }
}
 
VfL_Freak

VfL_Freak

Moin,

Dein Stack erwartet einen Double-Wert, Du willst aber einen Character hinzufügen, also "Double.valueOf" !
"Double.valueOf" wiederum erwartet einen String, keinen Character, deshalb muss Du "s" umwandeln!

VG Klaus
 
F

Fynn

Moin,

Dein Stack erwartet einen Double-Wert, Du willst aber einen Character hinzufügen, also "Double.valueOf" !
"Double.valueOf" wiederum erwartet einen String, keinen Character, deshalb muss Du "s" umwandeln!

VG Klaus
ist das definiert das "Double.valueOf" einen String erwartet?
 
Blender3D

Blender3D

ich habe ein Stack Programm welches mir eine Rechenoperation durchführt, ich habe dafür die Klasse stack verwendet und ein Input an zahlen als char mitgegeben. Bspw: (8*2)+2/((4/2)*3) und nach jeder Operation wieder aufgestapelt und zwischen gespeichert bis ich keinen char mehr habe.
Ich würde an Deiner Stelle das Ganze über einen kleinen handgeschrieben Parser lösen.

Die Grammatik könnte dabei so aussehen.
Ausdruck -> Term | Ausdruck + Term | Ausdruck - Term
Term -> Faktor | Term * Faktor | Term / Faktor
Faktor -> + Faktor | - Faktor | ( Ausdruck ) | Nummer
Mittels einer rekursiven (ersetzt den Stack) Funktion kann man das dann relativ einfach umsetzen.
Java:
/**
     * Calculates mathematical expression given by a string.
     * < expression -> term | expression '+' term | expression '-' term >
     * < term -> factor | term '*' factor | term '/' factor >
     * < factor -> '+' factor | '-' factor | '(' expression ')'| number
     *
     * @param text
     *            Text to parse.
     * @return double
     */
    public static double evaluate(final String text) {
        ..
    }
 
H

httpdigest

Agreed! Ein Recursive Descent Parser ist definitiv der beste Weg hier. Und, wenn du es (meiner Meinung nach "sauber") machen möchtest, dann verwendest du hier einen Parser Generator, wie etwa ANTLR oder javacc, und schreibst eine Grammatik.
Ich hatte noch eine Implementierung von 2016 für eine javacc Grammatik und gleichzeitigem JVM Bytecode-Generator (via ASM) zum effizienten Auswerten eines arithmetischen Ausdrucks: https://github.com/httpdigest/sec/blob/master/src/sec/Grammar.jj
 
Thema: 

Character umwandeln als Double Werte

Passende Stellenanzeigen aus deiner Region:
Anzeige

Anzeige

Anzeige
Oben