Wie kann ich einen Taschenrechner programmimeren?

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.

Woher ich das weiß:Berufserfahrung – Java Entwickler