Eingabeverarbeitung

Status
Nicht offen für weitere Antworten.

CohorsBitza

Mitglied
Hallo zusammen!!
Weil ich neu hier bin stell ich mich mal kurz vor:
Ich heiße Roland, komm aus Bayern und studiere jetzt dann im 2. Semester Technomathematik.

Ich hab jetzt in der Vorlesungsfreien Zeit versucht ein paar Applets zu programmieren. Mathezeug und so. Eine Sache quält mich dabei schon seit längerem, und zwar, ob man Eingabe-Strings auch direkt als Operatoren oder Methodennamen verwenden kann.

Wenn ich zum Beispiel eine Taschenrechner bauen will und in der Eingabe "3 + 4" steht, würde ich gern auf das Regex-ge-if-fe verzichten wollen:
Also statt
String input = "";
if(Pattern.matches("+",input)) { return 3 + 4 } elses {...}
einfach soetwas der Art schreiben: Operator op = input; return 3 op 4;

Meine Frage nun: Geht das????
Freue mich auf Eure Antworten!

Freundliche Grüße.
Roland
 

hdi

Top Contributor
Ich heiße Roland, komm aus Bayern und studiere jetzt dann im 2. Semester Technomathematik.

Ich heisse Thomas, bin ich hier schon seit über einem Jahr unterwegs und hab sowas
noch nie erlebt :lol:Aber nett...

Weil es die Sprache kaputt hauen würde. Klingt vllt doof, aber so ist es.
Die Leute von Sun sind keine Idioten oder so. Wieso sowas nicht geht (nicht nur in Java),
und wieso das auch gut so ist, lässt sich sicher auf über 500 Seiten ausdokumentieren.

Nimm's einfach hin.

PS: Was ist Technomathematik? Gibt's auch Hardrockphysik?
 

musiKk

Top Contributor
Mit irgendwelchen Skriptsprachen ist das möglich, z. B. mit eval() in JavaScript. Aber das nur am Rande, das ist ein völlig anderes Thema (präventiv: JavaScript ist nicht Java und damit nicht Bestandteil dieses Forums!).

In Java geht es wie beschrieben nicht so einfach, da muss man sich selbst drum kümmern.

Technomathematik...
 

slawaweis

Bekanntes Mitglied
Hallo zusammen!!
Weil ich neu hier bin stell ich mich mal kurz vor:
Ich heiße Roland, komm aus Bayern und studiere jetzt dann im 2. Semester Technomathematik.
Hallo Roland! Mein Name ist Slawa und Willkommen zu dieser angenehmen Runde der Anonymer Java-Programmierer :D

Wenn ich zum Beispiel eine Taschenrechner bauen will und in der Eingabe "3 + 4" steht, würde ich gern auf das Regex-ge-if-fe verzichten wollen:
Also statt
String input = "";
if(Pattern.matches("+",input)) { return 3 + 4 } elses {...}
einfach soetwas der Art schreiben: Operator op = input; return 3 op 4;

Meine Frage nun: Geht das????
nicht mit den nativen Mitteln, aber man kann es sich leicht selber basteln. Ich habe das schon mal vorbereitet:

Code:
public interface IOP
{
 public int op(int a, int b);
}

HashMap<String, IOP> ops = new HashMap<String, IOP>();
ops.put("+", new IOP() { public int op(int a, int b) { return a+b; } });
ops.put("-", new IOP() { public int op(int a, int b) { return a-b; } });
ops.put("*", new IOP() { public int op(int a, int b) { return a*b; } });
ops.put("/", new IOP() { public int op(int a, int b) { return a/b; } });
ops.put("%", new IOP() { public int op(int a, int b) { return a%b; } });

IOP op = ops.get(input);
return op.op(3, 4);

ich habe es jetzt nicht getestet, aber so ungefähr sollte es laufen.

Slawa
 

CohorsBitza

Mitglied
Hallo Roland! Mein Name ist Slawa und Willkommen zu dieser angenehmen Runde der Anonymer Java-Programmierer :D


nicht mit den nativen Mitteln, aber man kann es sich leicht selber basteln. Ich habe das schon mal vorbereitet:

Code:
public interface IOP
{
 public int op(int a, int b);
}

HashMap<String, IOP> ops = new HashMap<String, IOP>();
ops.put("+", new IOP() { public int op(int a, int b) { return a+b; } });
ops.put("-", new IOP() { public int op(int a, int b) { return a-b; } });
ops.put("*", new IOP() { public int op(int a, int b) { return a*b; } });
ops.put("/", new IOP() { public int op(int a, int b) { return a/b; } });
ops.put("%", new IOP() { public int op(int a, int b) { return a%b; } });

IOP op = ops.get(input);
return op.op(3, 4);

ich habe es jetzt nicht getestet, aber so ungefähr sollte es laufen.

Slawa

Hallo Slawa.
Ich hab deinen code getestet und er funktioniert einwandfrei! :applaus:
Schaut auch viel eleganter aus, als ewige if-Abfragen.
Wir hatten unseren "Calculator" mit einem Stack implementiert und ich musste in jedem if-case einen eigenen try-catch-Block bauen (für die ElementNotFoundException).
Jetzt tut's ein einziger :)

Da sag ich bloß noch: Merci!!

Roland
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben