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.
 

wintersun

Mitglied
Antwort:
Ganz einfach: Du beachtest Punkt vor Strich-Rechnung nicht. Bei dir wird immer von links nach rechts gerechnet, egal was für Rechenzeichen.
Und 1+2=3 ; 3*3=9


Danke für die Antwort, ich weiß schon eigentlich was du gemeinst, aber ich weiß nicht wie ich machen soll? Kannst du mir ein einfaches Bsp zeigen?

Danke im Voraus!

Lg.
 

nrg

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

Andi_CH

Top Contributor
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:

Ähnliche Java Themen


Oben