Wie kann ich einen Taschenrechner programmimeren?
Ich hab ein Taschenrechner programmiert, der 2 Zahlen vom Bennutzer haben will und ein Rechenzeichen. Punkt vor Strich ist vorerst egal... Ich will jetzt aber, dass der Taschenrechner mehrere Zahlen und Rechenzzeichen eingben lässt und dann auch eine normale Rechnung ausführen kann wie zB.: 3*4-5/6*3... Kann mir jemand helfen? (p.s. ich will nicht das ganze programm umschreiben vielleich kann ich eine methode oder sowas verwenden?) Danke schonmal im vorruas!
2 Antworten
Schnell zusammengebastelt:
package de.daCypher.exercises;
import java.util.Arrays;
import java.util.Scanner;
public class Rechner {
private static Scanner in = new Scanner(System.in);
public static void main(String[] args) {
System.out.println("Bitte Rechenterm eingeben");
String term = in.nextLine();
term.replaceAll("[^0-9\\+\\-\\*/]", ""); // Ungültige Zeichen löschen
String[] operationen = term.split("[0-9]+"); // Liste der Operationen erstellen
int[] zahlen = Arrays.stream(term.split("[\\+\\-\\*/]")).mapToInt(Integer::parseInt).toArray(); // Liste der Zahlen erstellen
double ergebnis = 0;
for (int i = 0; i<zahlen.length; i++) {
switch (operationen[i]) {
case "-": ergebnis-=zahlen[i];break;
case "*": ergebnis*=zahlen[i];break;
case "/": ergebnis/=zahlen[i];break;
default: ergebnis+=zahlen[i]; // bei "+" und "" (erste Zahl)
}
}
System.out.println(ergebnis);
}
}
Das Programm trennt die Eingabe in ein Array aus Zahlen (z.B. [3, 4, 5, 6, 3]) und ein Array aus Operationen (z.B. [+, *, -, /, *]) und rechnet dann einfach jede Operation mit jeder Zahl der Reihe nach durch.
Es achtet allerdings nicht auf Punkt vor Komma und kann keine negativen oder Kommazahlen in der Eingabe verarbeiten. Du hast also noch Spielraum für Optimierungen.
Ich will jetzt aber, dass der Taschenrechner mehrere Zahlen und Rechenzzeichen eingben lässt und dann auch eine normale Rechnung ausführen kann
Dann musst du einen Parser programmieren, welcher die Zeichenkette (z.B. 3*4-5/6*3) in die einzelnen Operation auflöst und einen Algorithmus entwickeln, welcher diese dann korrekt sequentiell berechnet.
Beispiel:
Zeichenkette: 3*4-5/6*3
Könnte man auch so schreiben: (3*4) - ((5/6)*3)
Könnte man unter Beachtung Punkt-vor-Strich in folgende Abfolge umwandeln:
1. (3*4) - ((5/6)*3) | Erste Klammer ausrechnen
2. 12 - ((5/6)*3) | Innerste Klammer ausrechnen
3. 12 - (0,8333*3) | Letzte Klammer ausrechnen
4. 12 - 2,5 | Differenz berechnen
5. 9,5
Wie du das genau umsetzen möchtest ist dir überlassen, aber dieses Schrittweise durchgehen wirst du machen müssen.
ich will nicht das ganze programm umschreiben
Aber das wirst du machen müssen, schließlich ist dein Programm im Moment nicht dafür ausgelegt.
kann ich eine methode oder sowas verwenden
Bestimmt gibt es Libs die das bereits können, aber das ist hier wohl eher nicht Ziel der Übung.