# Java einfacher Rechner programmieren



## Kusarr (29. April 2015)

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('+');
> ...



Hoffe ihr könnt mir nen kleinen Denkanstoß geben :/


----------



## Laudian (29. April 2015)

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.


----------



## Kusarr (29. April 2015)

ja aber wie such ich nach dem Operator? habe folgendes versucht:


> _int index1 = Eingabe.indexOf('+'||'-'||'*'||'/');_


aber das nimmt er nich


----------



## JimSim3 (29. April 2015)

Irgendwie sowas?


```
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/  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.  )


----------



## Kusarr (29. April 2015)

cool danke, das versuch ich mal so


----------



## taks (29. April 2015)

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 -.-


```
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());
```


----------



## xActionx (29. April 2015)

taks schrieb:


> 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 -.-
> 
> ...



Hinter default fehlt noch ein break. Hab das mal korrigiert.


----------



## taks (29. April 2015)

Ok, mein Code ist für den Arsch -.-
Aber bin zu Müde um heute noch was gescheites auf die Beine zu stellen.


----------



## DarkMo (6. Mai 2015)

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*


----------



## dommebaum (6. Mai 2015)

Kusarr schrieb:


> 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.


----------

