Calculator

wintersun

Mitglied
Hallo,

Ich bin ein Anfänger von Java und wollte ein Calculator programm schreiben.
Wenn ich einfach so eingabe z.B : 1 + 2 * 3, muss das Programm 7 ausgeben.
Ich habe folgendes code geschrieben, aber ich komme immer 9 heraus statt 7.

Ich weiß nicht wo ich falsch mache!!

Java:
import java.util.Scanner;
import java.util.Stack;

public class Calculator {


	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);
		

		int summe = 0;
		int i = sc.nextInt();
		
		while ( sc.hasNext()) {
			
			char op = sc.next().charAt(0);
			int j = sc.nextInt();
			
			
			if ( op == '*') {
				
				if ( summe == 0 )
					summe = i*j;
				else
					summe *= j;
				
			}
			else if ( op == '/' ) {
				
				if ( summe == 0 )
					summe = i/j;
				else
					summe /= j;
				
			}
			else if ( op == '+' ){
				
				if ( summe == 0 )
					summe = i+j;
				else
					summe += j;
			}
			else if ( op == '-' ) {
				
				if ( summe == 0 )
					summe = i-j;
				else
					summe -= j;
				
			}
			else {
				
				System.out.println("FALSCHE EINGABE");
				break;
			}	
			
		}
		System.out.println(summe);
		
		
		
	}

}

Danke im Voraus!

Lg.
 
Einfacher wie dort geht das wohl nicht

doch. nur wie gesagt mit weniger funktionalität 🙂

splitten in eine liste [operand, operator, operand, operator, operand] ...

dann einfach
Java:
while list.contains(operantor) { do()..
für jeden operator, beginnend mit der höchten prio.
und dann in do() je nach operator die nebenstehenden operanden verrechnen.

kann halt dann nur punkt-vor-strich aber ist für einen anfänger leichter zu verstehen und auch in ca 50 zeilen implementierbar.
 
Eingabe "1 + 2 * 3"

Du liest die Werte einzeln ein
da kommt eine '1' -> merken
da kommt ein '+' -> merken
da kommt eine '2' -> merken
zu '+' verzweigen und rechnen
da kommt ein '*' -> zu spät, du hast schon gerechnet

Du weisst ja noch gar nicht was kommt?


Du musst erst die ganze Zeile einlesen -> machst du auch, wenn das auf dem Papier steht.
Du musst denn Operator mit der tiefsten Priorität suchen -> machst du auch, wenn das auf dem Papier steht.
Dann nimmst du die beiden Werte links und rechst des gefunden Operators und verrechnest diese , nachdem du die getrennt berechnet hast -> machst du auch, wenn das auf dem Papier steht.
Dann hast du zwei neue Formel die heisst "1", die andere "2*3" und die Resultate zählst du zusammen.

und so weiter.

Programmieren beginnt auf dem Papier und nicht am Computer.

Ach ja, kannst du das da "1+2*3" nicht rechnen? Dein Rechner kann es nicht ;-)

So als Tipp: es bietet sich eine rekursive Lösung an oder du verwendest den vorgeschlagenen Parser (den ich, ich gebe es zu, nicht angeschaut habe)

Noch ein Tipp: Pack nicht alles in das Hauptorgramm sondern mach eine Prozedur mit einem String als Parameter -. es lässt isch so viel einfacher Testen.

Wenn du einen Ansatz von einer Lösung bringst, helfe ich dir weiter - Rekursiv ohne Klammern ist es eine einfache Sache.
 
Zuletzt bearbeitet:

Neue Themen


Zurück
Oben