simpler Taschenrechner (blutiger Anfänger)

Status
Nicht offen für weitere Antworten.

faust

Mitglied
Hallo erstmal...

also, vor ein paar Tagen habe ich beschlossen Java zu lernen. Nun dachte ich mir ich könnte ja mal zur Übung einen kleinen Taschenrechner programmieren. Bisher habe ich schon einiges an code geschrieben und soweit funktioniert bisher auch alles wie es soll, nur habe ich das Gefühl dass ich es zu kompliziert gemacht habe. Außerdem werde ich auch das Gefühl nicht los, dass ich den Grundgedanken der objektorientierten Programmierung noch nicht so ganz verinnerlicht habe. Vielleicht kann mir ja jemand auf die Sprünge helfen und mir sagen was ich an dem bisherigen code besser oder vielleicht komplett anders machen sollte. Bisher kann mein "kleines" Programm nur Ausdrücke wie z.B. (((14*(13+4))+3)*12) ausrechnen. Aber hier erstmal der Code:
Code:
class Taschenrechner 
{
	public static void main(String[] arg)
	{
		Expression ausdruck = new Expression("(((14*(13+4))+3)*12)");
		System.out.println(ausdruck.show()+" = "+ausdruck.eval());
			
	}
}

class Expression
{
	String exp,exp3;
	
	public Expression(String str)
	{
		exp=str;
		exp3=str;
		
	}
	//eval berechnet den Wert eines Ausdruckes
	public String eval()
	{   
		while(checkop(exp3))
		{
		exp3 = replace(trunc(),calc(remove(trunc())));
		}
		
			return exp3;

		
	}
	//show gibt den Ausdruck zurück 
	public String show()
	{
		return exp;
	}
	

	//trunc gibt den Term zurück der in der innersten Klammer steht
	private String trunc()
	{
		StringBuffer exp2 = new StringBuffer(exp3);
		exp2.setLength(find(')',exp2)+1);
		exp2.reverse();
		exp2.setLength(find('(',exp2)+1);
		exp2.reverse();
		return exp2.toString();	
	}
	//find gibt die stelle zurück an der ein zeichen in einem String gefunden wurde
	private int find(char ch,StringBuffer expr)
	{
		String str;
		str=expr.toString();
		if (str.indexOf(ch)==-1)
		{
			return expr.length();
		}
		else
		{
		return str.indexOf(ch);
		}
	}
	
	//calc gibt den wert (als String) eines einfachen Ausdrucks zurück (z.B. den Wert von (a+b))
	private String calc(String ex)
	{
		StringBuffer Bxe = new StringBuffer (ex);
		Bxe.reverse();
		Integer a,b,erg;
		char op;
		
		a=Integer.parseInt(getfirstnumber(ex));
		StringBuffer exB = new StringBuffer(getfirstnumber(Bxe.toString()));
		exB.reverse();
		b=Integer.parseInt(exB.toString());
		op=getop(ex);
		switch(op)
		{
		case '+':
			erg=a+b; 
			return erg.toString();
			
		case '-':
			erg=a-b; 
			return erg.toString();
			
		case '*':
			erg=a*b; 
			return erg.toString();
			
		}
		
		
	return ex;	
	}
	//replace ersetzt what in unserem Ausdruck durch by
	private String replace(String what, String by)
	{
		int start,end;
		StringBuffer whereB = new StringBuffer(exp3);
		StringBuffer lastpart = new StringBuffer();
		StringBuffer firstpart = new StringBuffer(exp3);
		
				
		start = exp3.indexOf(what);
		end = start + what.length()-1;
		lastpart=whereB.reverse();
		lastpart.setLength(exp3.length()-end-1);
		lastpart.reverse();
		firstpart.setLength(start);
		firstpart.append(by);
		firstpart.append(lastpart);
		return firstpart.toString();
		
		
	}
	//getfirstnumber liefert den ersten Zahlenwert eines Ausdrucks als String zurück
	private String getfirstnumber(String ex)
	{
		Character i=new Character('o');
		int j=0;
		StringBuffer ret = new StringBuffer();
		
	
			  while(i!='+'&&
			  		i!='-'&&
			  		i!='*')
			  {
			  	
			  	i=ex.charAt(j);
			  	ret.append(i);
			  	j++;
			  	
	  		  }	
	  		  ret.setLength(ret.length()-1);
	  		  return  ret.toString();
	}
	//getop liefert den ersten gefundenen Operator zurück (+,- oder *)
	private char getop(String ex)
	{
	Character i=new Character('o');
	int j=0;
	while(i!='+'&&
		  i!='-'&&
		  i!='*')
		{
		  i=ex.charAt(j);
		  j++;
		}	
		return i;
	}
	//remove entfernt das erste und das letzte Zeichen eines Strings
	private String remove (String str)
	{
		StringBuffer strB = new StringBuffer(str);
		strB.setLength(strB.length()-1);
		strB.reverse();
		strB.setLength(strB.length()-1);
		strB.reverse();
		return strB.toString();
	}
	//checkop überprüft ob noch ein Operator im übergebenen String enthalten ist 
	private boolean checkop(String ex)
	{
		StringBuffer exB=new StringBuffer(ex);
		
		if(find('+',exB)==ex.length() &&
		   find('-',exB)==ex.length() &&
		   find('*',exB)==ex.length())
		   {return false;}
		   else return true;
	}
}


Vielen Dank schonmal fürs lesen ;)
 

faust

Mitglied
hui nein, habe ich noch nicht gesehen, werde ich mir gleich mal durchlesen. danke an Dich für den link und schonmal danke an Beni...
 

MPW

Top Contributor
öhm, was bringt dir die zweite Klasse?
Warum schreibst du die anderen methoden nicht auch einfach in die Taschenrechner-Klasse und in der main-M. rufst du dann new Taschenrechner() auf...
 

faust

Mitglied
hmm gute frage ;)
ich dachte es könnte vielleicht sinn machen einen mathematischen Ausdruck als eigenständiges Objekt zu behandeln... aber warum?! ich glaube ich verstehe das ganze konzept noch nicht so ganz. auch was ich schon alles gelesen habe ist mir in seinen konsequenzen noch nicht klar (interfaces, exceptions etc.)... aber das kommt sicher noch, werd jetzt erstmal in ne buchhandlung fahren und mich nach java büchern umsehen, ein paar tips bezüglich literatur konnte ich ja schon dem forum hier entnehmen... ...wird sicher noch ne lange nacht heute ;)
 

MPW

Top Contributor
ja es macht sicher Sinn einen mathematischen Ausdruck als eigenes Objekt zu behandeln, aber es macht kein Sinn ein Objekt zu erstellen, was nur wiederum ein weiteres erzeugt(deine Taschenrechner-class)!

Als Buch empfehle ich ganz klar Java-ist-auch-eine-Insel, ist einfach mit Abstand das Beste, was ich kenne.
 
B

Beni

Gast
Ich finde das nicht so schlecht. Was hat die main-Methode mit der Expression zu tun? Gar nichts, die beiden haben überhaupt keine Verbindungen. Und einfach eine Methode rumschleppen weil man zu faul ist eine zweite Klasse zu schreiben.. naja :wink:
 

faust

Mitglied
naja, ich hatte ja auch vor das ganze noch zu erweitern (also insbesondere die klasse taschenrechner)... vielleicht mal um eine grafische oberfläche. weiß nur noch nicht genau wie das geht ;)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Q simpler Taschenrechner Java Basics - Anfänger-Themen 34
Z Sehr simpler Taschenrechner - Hilfe! Java Basics - Anfänger-Themen 10
D Simpler Taschenrechner Java Basics - Anfänger-Themen 6
W [PROJEKT] Simpler grafischer Taschenrechner Java Basics - Anfänger-Themen 8
F Datentypen Ganz simpler Taschenrechner mit switch Java Basics - Anfänger-Themen 10
T simpler Kalender Java Basics - Anfänger-Themen 10
N Simpler cast? Java Basics - Anfänger-Themen 9
M Simpler Algorithmus läuft extrem langsam. Java Basics - Anfänger-Themen 3
S Fehler bei simpler additions GUI Java Basics - Anfänger-Themen 2
P ganz simpler algorithmus Java Basics - Anfänger-Themen 3
F Simpler DrawLine - Befehl!? Java Basics - Anfänger-Themen 9
L Simpler FTP Dateiupload Java Basics - Anfänger-Themen 4
J Simpler DNS Client Java Basics - Anfänger-Themen 20
G Datenbank VS simpler Datenstruktur Java Basics - Anfänger-Themen 3
N Java Taschenrechner hat Jemand vlt einen Tipp dafür wie ich jetzt die buttons verbinden kann und das Ergebnis auf dem textfield anzeigen lassen kann Java Basics - Anfänger-Themen 13
L Taschenrechner Problem Java Basics - Anfänger-Themen 4
J Frage zu einem "Taschenrechner" code Java Basics - Anfänger-Themen 9
R Operatoren Rechenoperation verwenden für Taschenrechner. Java Basics - Anfänger-Themen 32
S while Schleife Taschenrechner Java Basics - Anfänger-Themen 1
J Taschenrechner mit mehr als 2 Zahlen. Java Basics - Anfänger-Themen 18
R Einfacher Taschenrechner mit Eclipse Java Basics - Anfänger-Themen 3
M Einfacher Taschenrechner Java Basics - Anfänger-Themen 2
Fiedelbambu Prüfen von Komma stelle beim Taschenrechner Java Basics - Anfänger-Themen 5
JordenJost Taschenrechner problem Java Basics - Anfänger-Themen 5
Y Taschenrechner programmieren Java Basics - Anfänger-Themen 3
G Taschenrechner ergibt Fehler in if-Abfrage Java Basics - Anfänger-Themen 6
K Erste Schritte "Taschenrechner" zeigt keine Komma Zahlen an. Java Basics - Anfänger-Themen 8
C Potenzberechnung über switch case. Taschenrechner mit Eingabe über einen grafischen Dialog Java Basics - Anfänger-Themen 22
E JavaFX Taschenrechner Eingabe im Textfield beschränken Java Basics - Anfänger-Themen 2
E Taschenrechner GUI Problem mit Fehlerhandling Java Basics - Anfänger-Themen 6
C Taschenrechner (switch) in Taschenrechner mit Methoden umwandeln Java Basics - Anfänger-Themen 115
W Taschenrechner mit Switch case Java Basics - Anfänger-Themen 4
W Taschenrechner Java Basics - Anfänger-Themen 11
A Taschenrechner mit Gui erstellen Java Basics - Anfänger-Themen 9
2 Taschenrechner mit GUI Problem bei der Berechnung Java Basics - Anfänger-Themen 8
P Taschenrechner mit unendlich vielen Eingabemöglichkeiten Java Basics - Anfänger-Themen 1
V Erste Schritte Taschenrechner mit beliebig vielen Zahlen Java Basics - Anfänger-Themen 5
S Taschenrechner Java Basics - Anfänger-Themen 13
P Taschenrechner Text übertragung Java Basics - Anfänger-Themen 3
S Compiler-Fehler Basic- Taschenrechner/ Fehler Java Basics - Anfänger-Themen 8
S Basic- Taschenrechner? Java Basics - Anfänger-Themen 7
P Hilfe bei Java Taschenrechner Java Basics - Anfänger-Themen 25
F Erste Schritte Frage zu simplem Taschenrechner(switch) Java Basics - Anfänger-Themen 16
L Mein Taschenrechner lässt sich plötzlich nicht mehr öffnen Java Basics - Anfänger-Themen 5
S Taschenrechner hilfe! Java Basics - Anfänger-Themen 17
H Java Taschenrechner Java Basics - Anfänger-Themen 4
R Variablen Taschenrechner mit Komfortfunktionen Java Basics - Anfänger-Themen 2
J RPN Taschenrechner - keine Lösung!! Java Basics - Anfänger-Themen 84
M Java Taschenrechner (if-else) Java Basics - Anfänger-Themen 11
L Taschenrechner mit switch und while funktioniert noch nicht richtig Java Basics - Anfänger-Themen 22
R Taschenrechner NullPointerException Java Basics - Anfänger-Themen 1
R Variablen Weitergehenderr Taschenrechner Java Basics - Anfänger-Themen 4
F Taschenrechner "Error loading class..." Java Basics - Anfänger-Themen 5
M Java Taschenrechner Programmieren Java Basics - Anfänger-Themen 12
P Erste Schritte Taschenrechner mit if-else Anweisung Java Basics - Anfänger-Themen 6
G Taschenrechner gibt nur 0.0 aus Java Basics - Anfänger-Themen 8
A Taschenrechner programmieren Java Basics - Anfänger-Themen 21
Z Java Taschenrechner Java Basics - Anfänger-Themen 6
J Kleiner Taschenrechner! Anfänger braucht Hilfe :( Java Basics - Anfänger-Themen 2
C Taschenrechner in Java Java Basics - Anfänger-Themen 6
J Erste Schritte Java CMD Taschenrechner mit Parametern! Java Basics - Anfänger-Themen 16
J Taschenrechner: Probleme Java Basics - Anfänger-Themen 5
E Taschenrechner problem! Ich komme nicht voran Java Basics - Anfänger-Themen 18
R Erste Schritte Taschenrechner mit Schleife Java Basics - Anfänger-Themen 24
Lord.Djerun (Taschenrechner Netbeans) Komma nur einmal schreiben & 0 ersetzen Java Basics - Anfänger-Themen 1
Z Taschenrechner - Additions/Substraktions/Multiplikations/Divionsketten! Java Basics - Anfänger-Themen 4
D Taschenrechner Frage Java Basics - Anfänger-Themen 12
Z Taschenrechner - Wie addiere,multipliziere und subtrahiere ich? Java Basics - Anfänger-Themen 6
D kleiner Taschenrechner mit switch fehlerhaft Java Basics - Anfänger-Themen 1
K Taschenrechner im GUI Java Basics - Anfänger-Themen 2
P Taschenrechner, operatoren Java Basics - Anfänger-Themen 4
A Anfänger Taschenrechner Frage Java Basics - Anfänger-Themen 14
R Erste Schritte Taschenrechner - Punkt-vor-Strich Rechnung Java Basics - Anfänger-Themen 1
S Operatoren Taschenrechner Ergebnis ausgeben Java Basics - Anfänger-Themen 7
A Taschenrechner zeigt Error Java Basics - Anfänger-Themen 7
J Taschenrechner Funktion Java Basics - Anfänger-Themen 18
M Taschenrechner fertigstellung Java Basics - Anfänger-Themen 1
N Methoden Taschenrechner Java Basics - Anfänger-Themen 2
F z = input.nextChar(); PROBLEM Taschenrechner Java Basics - Anfänger-Themen 7
J Scanner Taschenrechner? Java Basics - Anfänger-Themen 7
J Variablen Rechenzeichen und Zahlen verknüpfen für einen Taschenrechner Java Basics - Anfänger-Themen 17
B Klassen Java Taschenrechner mit Klassen und Methoden Java Basics - Anfänger-Themen 12
B Erste Schritte Brauche Hilfe bei einem Java-Taschenrechner Java Basics - Anfänger-Themen 11
R Methoden Taschenrechner Java Basics - Anfänger-Themen 4
P Taschenrechner , IF-Abfrage Java Basics - Anfänger-Themen 12
I Taschenrechner - Methoden implementieren Java Basics - Anfänger-Themen 5
I Java Starthilfe (Taschenrechner) Java Basics - Anfänger-Themen 7
J Taschenrechner Problemchen Java Basics - Anfänger-Themen 3
D Erste Schritte Taschenrechner Java Basics - Anfänger-Themen 11
K taschenrechner - Fehler beim Kürzen eines Bruches finden Java Basics - Anfänger-Themen 20
J Taschenrechner Punkt vor Strich Java Basics - Anfänger-Themen 9
A Taschenrechner programmieren Java Basics - Anfänger-Themen 5
M Ausklappbares Fenster bei grafischem Taschenrechner Java Basics - Anfänger-Themen 2
M Dividieren bei Grafischem Taschenrechner klappt nicht Java Basics - Anfänger-Themen 2
N Taschenrechner mit Unterprogra Java Basics - Anfänger-Themen 6
C Taschenrechner Java Basics - Anfänger-Themen 12
Z Taschenrechner programmieren Java Basics - Anfänger-Themen 5
E Erste Schritte Taschenrechner Java Basics - Anfänger-Themen 8
K Taschenrechner Java Basics - Anfänger-Themen 25
J Textfeld für Taschenrechner Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben