Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
ich bin gerade dabei einen kleinen Taschenrechner zu programmieren.
es folgt so, dass die gesamte eingabe als string eingelesen wird. dann wird über eine funktion rechnen() der string zerteilt und wieder ausgegeben, so hätt ich mir das auf jedenfall vorgestellt
aber wie trennen ich das ganze am besten? da ja der string unter umständen "123+456-789=" heißen kann
wie ich begonnen habe poste ich mal besser nicht, da es haufenweise fehlermeldungen ausspuckt(nicht im compiler)
Die Klasse String bietet eine Methode split(String regEx), die eben einen solchen
Ausdruck annimmt, und den String anhand des RegEx in ein Array von Teilstrings
zerteilt.
Allerdings musst du ja wissen, welches Zeichen das genau war, damit du
entsprechend rechnen kannst.
Also vllt ist es doch hier passender/leichter das ganze mit if-Abfragen zu machen.
Stichwort die String-Methoden "contains" und eben "split".
Das ganze noch inner while-Schleife oder sowas, musst halt auf Punkt vor Strich achten.
Bei meinem Taschenrechner habe ich es so gemacht, dass ich die einzelnen Teile durch '+' voneinander getrennt habe:
Code:
50+p+50+s+30
Das steht dann für 50 + 50 - 30. So kann ich den String an den Plussen aufsplitten, in einem Array speichern und wenn ich dann ein Rechnezeichen finde (zum Beispiel das p für Plus) dann addiere ich die Zahl davor mit der Zahl danach.
Also ich will ja nix schlecht reden, zumal ich grad auch keine Lust habe mir über ein schöne Lösung
Gedanken zu machen, aber so geil ("elegant") ist das nicht gerade...
Rechnet dein Taschenrechner dann überhaupt korrekt?
Also ich will ja nix schlecht reden, zumal ich grad auch keine Lust habe mir über ein schöne Lösung
Gedanken zu machen, aber so geil ("elegant") ist das nicht gerade...
Rechnet dein Taschenrechner dann überhaupt korrekt?
War das auf mich bezogen?
Kann schon sein, das meins nich so elegant ist, aber wenn man erst Potenzen, danach Punktrechnung und dann erst Strichrechnung abarbeitet, klappts . Und das war eins der ersten "umfangreicheren" Programme, die ich geschrieben hab, da war ich froh, das es überhaupt funktioniert hat
Edit: Das mag ich übrigends besonders an diesem Forum: man kann seine Ideen hier kundtun und erfährt dann auch, wenn die gar nich so toll waren, wie man dachte^^
ich habe es nun anders gelöst, es funktioniert noch nicht perfekt, und punkt vor strichrechnung wird auch nicht berücksichtigt aber ich denke so wird das schon eher was..
Code:
public static int rechnen(String s){
int zahl= 0;
int erg = 0;
char operator = 'z';
for(int i=0; i<s.length();i++){
if(s.charAt(i) >= '0' && s.charAt(i) <= '9'){ //überprüfe ob es eine zahl ist
if(i >= 1){
if(s.charAt(i-1) >= '0' && s.charAt(i-1) <= '9'){ //wenn davor schon eine zahl ist, wird sie mal 10 multipliziert um die stellen zu erzeugen
zahl = (zahl * 10) + (Integer.parseInt(""+s.charAt(i)));
}else{
zahl = Integer.parseInt(""+s.charAt(i)); //wenn nicht, wird sofort eine int erzeugt
}
}else{
zahl = Integer.parseInt(""+s.charAt(i));
}
}
if ((s.charAt(i) == '+') || (s.charAt(i) == '-') || (s.charAt(i) == '*') || (s.charAt(i) == '/')){
switch(operator){
case '+': erg = erg + zahl; break; //es werden die rechenoperatoren herausgefiltert
case '-': erg = erg - zahl; break; //das ergebnis wird dann mit der zahl berechnet
case '*': erg = erg * zahl; break; //kann eben auch öfters aufgerufen werden
case '/': erg = erg / zahl; break;
}
operator = s.charAt(i);
zahl = 0;
}
if (s.charAt(i) == '='){
return erg;
}
} //und irgendwo ist der fehler =(
return -1337;
}
Passe ma uff:
- Die beste Datenstruktur für Taschenrechner sind Stacks
- Um Stacks verwenden zu können, braucht man Postfix-Notation (auch "Umgekehrt Polnische Notation" genannt)
- Um aus der "normalen" Infix-Notation mit Klammern die Postfix-Notation zu erhalten, gibt es einen recht einfachen Algorithmus (Shuntingyard von Dijkstra)
- alles andere ist entweder unnötig kompliziert oder Spielzeug