Java einfacher Rechner programmieren

Kusarr

Software-Overclocker(in)
hey Leute,

ich will nen einfachen Rechner programmieren, häng aber aktuell an nem kleinen Problem.

Die Eingabe soll bspw wie folgt lauten:

String Eingabe = "14+15-16";

ich bekomm die zahlen theoretisch in nen Integer konvertiert (über substring), nur hab ich ein problem, dass ich nicht weiß, wie ich die Trennung zwischen den substrings herausfinde.

Problem 1: es kann + - * / als Trennung vorkommen und dass auch nicht nur einmal.
Problem 2: die Zahlen können ja unterschiedlich lang sein.

ich bekomms aktuell nur hin mit einem Operator:
System.out.println("Berechnung:");
String Eingabe = "14+15";

int index1 = Eingabe.indexOf('+');

String sub1 = Eingabe.substring(0, index1);
String sub3 = Eingabe.substring(index1 + 1);


int zahl1 = Integer.parseInt(sub1);
int zahl2 = Integer.parseInt(sub3);


int Ergebnis = zahl1 + zahl2;

System.out.println(Ergebnis); //29

Hoffe ihr könnt mir nen kleinen Denkanstoß geben :/
 
Für so eine Aufgabe bietet sich eine rekursive Funktion an, also eine Funktion, die sich selbst aufruft.

In diesem Fall würde ich den String von Links nach Rechts nach einem Rechenoperator durchsuchen und dann in 3 Substrings teilen (links des Operators, Operator, rechts des Operators). Anschließend kann man diese Funktion einfach solange auf den verbleibenden String anwenden, bis es keinen Rechenoperator mehr gibt.

Alternativ kann man das natürlich auch mit einer while Schleife lösen.
 
Irgendwie sowas?

Code:
int rechnen (String input) {
    int i = 0;
    if (input.split("+").length() > 1) {
       for (String item : input.split("+")) {
           i = i + rechnen(item);
       }
       return i;
   }
   return Integer.parseInt(input) 
}

(Und dann noch ifs für die weiteren Rechenoperationen... Spaßeshalber hier mal schnell ein javascript Fiddle mit + und -: https://jsfiddle.net/dw0w32e8/ :D Die Syntax ist ja relativ ähnlich zu java. * und / überlass ich dir, da muss man sich allerdings wegen der "Punkt- vor Strich-Rechnung" auch noch was überlegen. :) )
 
Zuletzt bearbeitet:
Hier mal was ohne Rekursion. Habs aber nur aus dem Kopf geschrieben, weiss ned obs auch läuft ^^

Funktioniert soweit aber glaub nur solange nicht zwei Operatoren nach einander kommen -.-

Code:
System.out.println("Berechnung:");
String eingabe = "14+15";
int result = 0;
String var  = "";

for(int i = 0; i <= eingabe.length(), i++){
        switch(eingabe.charAt(i)){ 
        case "+": 
            result += Integer.parseInt(var); 
            var = "";
            break; 
        case "-": 
            result -= Integer.parseInt(var) ; 
            var = "";
            break; 
        case "/": 
             result /= Integer.parseInt(var);
            var = "";
            break; 
        case "*": 
             result /= Integer.parseInt(var);
            var = "";
            break; 
        default: 
            var += eingabe.charAt(i); 
}

System.out.println(result.toString());
 
Zuletzt bearbeitet:
Hier mal was ohne Rekursion. Habs aber nur aus dem Kopf geschrieben, weiss ned obs auch läuft ^^

Funktioniert soweit aber glaub nur solange nicht zwei Operatoren nach einander kommen -.-

Code:
System.out.println("Berechnung:");
String eingabe = "14+15";
int result = 0;
String var  = "";

for(int i = 0; i <= eingabe.length(), i++){
        switch(eingabe.charAt(i)){ 
        case "+": 
            result += Integer.parseInt(var); 
            var = "";
            break; 
        case "-": 
            result -= Integer.parseInt(var) ; 
            var = "";
            break; 
        case "/": 
             result /= Integer.parseInt(var);
            var = "";
            break; 
        case "*": 
             result /= Integer.parseInt(var);
            var = "";
            break; 
        default: 
            var += eingabe.charAt(i); 
           break;
}

System.out.println(result.toString());

Hinter default fehlt noch ein break. Hab das mal korrigiert.
 
Ok, mein Code ist für den Arsch -.-
Aber bin zu Müde um heute noch was gescheites auf die Beine zu stellen.
 
prinzipiell bin ich bei dir taks, aber beim default geht noch was schief. aus der 14 sollte mMn bei der methode ne 5 werden ^^. erst findet er die 1 -> 0+1=1. danach findet er die 4 -> 1+4=5. besser wäre wohl var = var * 10 + neue-zahl (oder so). und var dürfte dann beim finden eines operators nicht auf "" zurück gesetzt werden, sondern auf 0 ^^


edit: ach, jetz rall ich das erst ^^ hab var mit result verwechselt >< könnte doch so hinkommen *duck*
 
ja aber wie such ich nach dem Operator? habe folgendes versucht:

aber das nimmt er nich

Sorry wenn ich das rauskrame:

Wenn du die Operatoren in ein Array speicherst, dann über den String iterierst und dann einen Substring erstellst bis zum Rechenzeichen, dass müsste doch gehen. Dann den ersten Index auf die Zahl der Stelle im String plus 1 setzen und weiter durch gehen. Und immer so weiter.

Dass du dann damit arbeiten kannst, also Rechenoperationen ausführen kannst, dazu musst du es dann wie JimSim3 schon sagte noch parsen.

Hab so mal einen Textfieldchecker gebaut der die Eingabe in einem JTextfield durchgegangen ist, und falls die Eingabe eine andere war als definiert, hat er ein boolean geliefert.

Kann das morgen oder so mal aufschreiben.

Außer das Problem wurde bereits gelöst.
 
Zurück