Java-Projekt Bruchrechnen |
09.01.2011, 01:02 | Auf diesen Beitrag antworten » | |||||||||||||||||||||||||||||||||||
yoyo | Java-Projekt Bruchrechnen Meine Frage: hallo alle zsm, undzwar muss ich ein Projekt mit drei klassen schreiben, dass dem benutzer ermöglicht unterschiedliche bruchrechnungen durchzuführen. diese 3 klassen sind einmal bruch, bruchrechnen und rechnen. Die Klasse bruch kapselt die erforderlichen Daten und Methoden zur grundsätzlichen Erfassung und Handhabung eines Bruches. die klasse rechnen soll methoden zum rechnen mit brüchen zur verfügung stellen, also genauer gesagt wie man zwei brüche dividiert, subtrahiert, addiert und multipliziert, dabei soll man aber keine neue variablen deklarieren, sondern auf vorhandene in der klasse bruch zugreifen, was ich schon mal nicht kann. :S due klasse bruchrechnen soll sozusagen die verbindung zum benutzer sein und als steuerprogramm für den anwender dienen, also auf vorhandene methoden zurückgreifen (in "rechnen" und"bruch") und diese "System.out.print" machen. habt ihr schon ungefähr ne vorstellung was ich machen muss? für profis klingt das vllt ganz einfach, aber ich kann das irgendwie einfach nicht, ich hab erst informatik seit einem halben jahr und der lehrer erwartet von uns das wir sowas alles selbstständig können.! Meine Ideen: jedenfalls hab ich schon mal was an quelltext geschrieben, aber der funktioniert von kopf bis fuß nicht und deswegen komm ich nicht weiter... hier: KLASSE BRUCH: public class bruch{ private int zaehler; private int nenner; public bruch(int z, int n){ zaehler = z; nenner = n; } public String bruchString(){ return zaehler+"/"+nenner; } public void erweitern(int erweiterungszahl){ zaehler=zaehler*erweiterungszahl; nenner=nenner*erweiterungszahl; } public void kürzen(int kuerzungszahl){ zaehler=zaehler/kuerzungszahl; nenner=nenner/kuerzungszahl; } public String gemischteDarstellung(){ if(zaehler>nenner){ neu=zaehler/nenner; } } public void einfachsteDarstellung(){ int einfach = zaehler/nenner; new zaehler = zaehler/einfach; new nenner = nenner/einfach; } } //möglichkeiten für methoden:kürzen, gemischte darstellung, to string, dezimal, kehrwert // das kürzen, erweitern, 4 rechenarten , ausgabe funktion, min. 2 weitere funktionen (bsp.: ein //fachste darstellung, gemischte darstellung, kehrwert etc.) KLASSE BRUCHRECHNEN: public class bruchrechnen{ bruch b1; bruch b2; public void bruch1(int z, int n){ bruch b1 = new bruch (z,n); System.out.print(b1.bruchString()); } public void bruchrechnen(int zaeh1er1,int nenner1,int rechenzeichen,int zaehler2,int nenner2){ switch(rechenzeichen){ case "+":System.out.println(bruchAddition(bruch1,bruch2));break; case "-":System.out.println(bruchSubtraktion(bruch1,bruch2));break; case "*":System.out.println(bruchMultiplikation(bruch1,bruch2));break; case "/":System.out.println(bruchDivision(bruch1, bruch2));break; } } } //public String Erweitern(int z, int n, int erweiterungszahl){ //bruch b1 = new bruch(z,n); //System.out.print(b1.erweitern(z,n)); //} //public void bruchKehrwert(int z, int n){ //bruch b1 = new bruch(z,n); //System.out.print(Kehrwert(z,n)); // } //} KLASSE RECHNEN: public class rechnen{ public bruchAddition(bruch(int z1,int n1),bruch(int z2,int n2)){ return new bruch(a.gibZaehler()*b.gibNenner()+b.gibZaehler()*a.gibNenner(),a.gibNenner ()*b.gibZaehler()+b.gibNenner()*a.gibZaehler); } public bruchSubstraktion(bruch a, bruch b){ return new bruch(a.gibZaehler()*b.gibNenner()-b.gibZaehler()*b.gibNenner(),a.gibNenner ()*b.gibZaehler()+b.gibNenner()*a.gibZaehler); } public bruchMultiplikation(bruch a, bruch b){ return new bruch(a.gibZaehler()*b.gibZaehler,a.gibNenner()*b.gibNenner()); }b public bruchDivision(bruch a, bruch b){ return new bruch(a.gibZaehler()*b.gibNenner(),a.gibNenner()*b.gibZaehler()); } public String Kehrwert(int zaehler, int nenner){ zaehler = nenner; nenner = zaehler; return nenner+"/"+zaehler; } private String gibZaehler(int zaehler){ return zaehler; } private String gibNenner(int nenner){; return nenner; } } also zunächst muss ich sagen, dass das was ich hinter "//" geschrieben hab Notizen sind, oder Methoden die irgendwie nicht funktionieren, ich aber schreiben muss ._. könnt ihr mir weiterhelfen?? ich brauche dringend hilfe !! vielleicht könnt ihr mir erst mal sagen wir ich +,-,x,: als methoden in rechnen schreiben soll...irgendwas ist da ja falsch... :S |
|||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||
09.01.2011, 11:21 | Auf diesen Beitrag antworten » | |||||||||||||||||||||||||||||||||||
aal | Warum müsst ihr das immer so kompliziert machen ? Der Aufbau eines Rechners in der einfachsten Form ist: Eine Klasse mit: Ein Scanner für erste Zahl Ein Scanner für den Operator ( + - / *) Ein Scanner für die zweite Zahl Eine vier If-Bedingungen oder Switch-Case ,für jeden Operator z.B. If ( operator.equals("+")) { ergebnis = zahl1+zahl2; } Und eine Ausgabe z.B. System.out.println("ergebnis"); mehr ist da echt nicht ! und die "//" sind keine Methoden ,sondern Kommentare ! |
|||||||||||||||||||||||||||||||||||
09.01.2011, 16:04 | Auf diesen Beitrag antworten » | |||||||||||||||||||||||||||||||||||
ed209 |
Ich glaub du hast die Aufgabenstellung mißverstanden, wenn Du dir die Klasse Bruch ansiehst ist es mit einem einfachen zahl1 + zahl2 nicht getan. Bei der Aufgabe kann ich jetzt auch nicht helfen, weil ich nicht weiß wo genau das Problem (oder die Probleme) liegen. Gruß, ED |
|||||||||||||||||||||||||||||||||||
09.01.2011, 19:01 | Auf diesen Beitrag antworten » | |||||||||||||||||||||||||||||||||||
yoyo | das problem ist jetzt nur noch wie ich die 4 rechenarten +,-,*,/ schreiben soll in der klasse rechnen mit den variablen aus der klasse bruch, d.h. ich darf keine neuen variablen in rechnen deklarieren, sondern muss sie durch "a.gibNenner" aus der anderen klasse herholen, soweit ich weiß, was aber irgendwie nicht funktioniert. also könnt ihr mir vielleicht dabei helfen, die 4 rechenarten zu schreiben? |
|||||||||||||||||||||||||||||||||||
Anzeige | ||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||
10.01.2011, 11:24 | Auf diesen Beitrag antworten » | |||||||||||||||||||||||||||||||||||
MaBa | Hallo yoyo, ("Limit" gelesen? *gg*) Ich fang einfach mal an: (1) Was soll
Es sollte ein String zurückgeliefert werden, was aber nicht der Fall ist. Außerdem verwendest du eine Variable die nirgendwo deklariert ist. Evtl. ist sowas gemeint:
? Aber das ist nur eine Vermutung. (2) Was soll
Hier stimmt irgendwie gar nix. Das Schlüsselwort "new" wird verwendet um ein Objekt zu erstellen. Auf der linken Seite hat es also nichts verloren. Außerdem gibt es keine Klasse Zähler und auch keine Klasse Nenner. Was hier evtl. gemacht werden soll ist das Ergebnis als Gleitkommazahl (gerundet) auszugeben. Aber auch hier: Reine Spekulation. (aufgabenstellung?) (3)
soll der Konstruktor sein, daher: kein Rückgaebtyp. (4) Die Aufrufe
(5) Ohje, ich merke gerade es wird unübersichtlich. bruchAddition(b1,b2) sind Methoden deiner Klasse "rechnen". Um diese aufrufen zu können müsstest du die Klasse erst instanziieren. Das ist sehr verwirrend. Implementiere die Operationen besser innerhalb der Klasse Bruch, denn da gehören sie auch hin: z.B.: public bruch addiere( bruch a) { int neuerZaehler = zaehler * a.getNenner() + nenner * a.getZaehler(); int neuerNenner = nenner * a.getNenner(); return new bruch( neuerZaehler , neuerNenner ); } Benenne die Getter & Setter am besten auch mit get... und set... Wenn die Klassenstruktur vorgegeben ist, würde ich dann in der Klasse rechnen die Aufrufe einfach weiterleiten, also z.B.
In deinem Code sind noch einige andere Probleme, versuch erst mal das ein paar der Probleme zu beseitigen. Wenn weitere Probleme auftreten, meld dich einfach nochmal. Viele Grüße, MaBa |
|||||||||||||||||||||||||||||||||||
10.01.2011, 23:23 | Auf diesen Beitrag antworten » | |||||||||||||||||||||||||||||||||||
yoyo | Implementiere die Operationen besser innerhalb der Klasse Bruch, denn da gehören sie auch hin: z.B.: public bruch addiere( bruch a) { int neuerZaehler = zaehler * a.getNenner() + nenner * a.getZaehler(); int neuerNenner = nenner * a.getNenner(); return new bruch( neuerZaehler , neuerNenner ); } Benenne die Getter & Setter am besten auch mit get... und set... |
|||||||||||||||||||||||||||||||||||
10.01.2011, 23:26 | Auf diesen Beitrag antworten » | |||||||||||||||||||||||||||||||||||
yoyo | das da oben,was ich eigentlich asl zitat schreiben wollte :'D hab ich nicht so verstanden, also muss man "get und set" nochmal als als eigene methode schreiben ? und in welcher klasse wenn ja? wie würde das dann aussehen? weil ich dachte das aufrufe nur mit methoden funktionieren also a.vertikalVerschieben(5); mit vertikal Verschieben als eigene methode nicht? aber den rest hab ich verstanden danke nur halt diese 4 rechenarten das klappt irgendwie nicht ._. |
|||||||||||||||||||||||||||||||||||
10.01.2011, 23:57 | Auf diesen Beitrag antworten » | |||||||||||||||||||||||||||||||||||
Ibn Batuta |
Immerhin hast du deine Variablen als private deklariert, dann mußt du diese Methoden auch schreiben, nämlich in der Klasse bruch (die sich übrigens groß geschrieben gehört, da Klassen immer groß geschrieben werden - ist ´ne Konvention...). Wie möchtest du sonst den Zähler und den Nenner in einer anderen Klasse manipulieren wollen? Wenn du etwas als private deklarierst, kannst du von einer anderen Klasse auf diese Variablen (manipulierender Absicht) nicht zugreifen. Dafür mußt du dann get- und set-Methoden zurechtlegen, mit denen du mittels eines Objektes dieser Klasse darauf zugreifst. Ibn Batuta PS: Die Fälle für den Fall, dass der Nenner mal 0 werden könnte, sind noch gar nicht abgedeckt. |
|||||||||||||||||||||||||||||||||||
11.01.2011, 08:18 | Auf diesen Beitrag antworten » | |||||||||||||||||||||||||||||||||||
MaBa |
Als kurze Ergänzung: private Variablen sind überhaupt nicht für andere Klassen sichtbar, auch nicht für den lesenden (nicht manipulierenden) Zugriff. Kurzes Beispiel zu Getter & Setter:
Das Prinzip hast du aber auch schon verwendet, allerdings heißen die Methoden bei dir "gibZaehler" und "gibNenner". Syntaktisch ist das völlig o.k. wird aber üblicherweise so benannt wie oben erläutert. Das Problem liegt darin, dass die Methoden in der falschen Klasse definiert werden, da die Variablen in bruch deklariert werden und die methoden in rechnen implementiert sind. Aber um Ordnung in deinen Code zu bringen: Welcher Code bzw. welche Struktur wurde denn vorgegeben? Viele Grüße, MaBa |
|||||||||||||||||||||||||||||||||||
11.01.2011, 15:34 | Auf diesen Beitrag antworten » | |||||||||||||||||||||||||||||||||||
Ibn Batuta |
Das meinte ich damit auch. Da es hier um Manipulation des Zählers und Nenners geht, habe ich es so erklärt. Natürlich ist deine Erklärung umfassender. Ibn Batuta |
|||||||||||||||||||||||||||||||||||
13.01.2011, 08:51 | Auf diesen Beitrag antworten » | |||||||||||||||||||||||||||||||||||
yoyo | danke für die umfangreiche hilfe ) es klappt zwar noch nicht so ganz, aber immerhin komm ich voran ich hoffe ihr seid noch da, wenn ich weitere fragen hab |
|||||||||||||||||||||||||||||||||||
13.01.2011, 16:04 | Auf diesen Beitrag antworten » | |||||||||||||||||||||||||||||||||||
aal |
nö !!! |
|||||||||||||||||||||||||||||||||||
13.01.2011, 17:21 | Auf diesen Beitrag antworten » | |||||||||||||||||||||||||||||||||||
Ibn Batuta | Bei Fragen zum Code solltest du den Quellcode, wo es gerade hapert, immer auch mitposten. Sonst ist es schwer eine Ferndiagnose zu liefern, ohne zu wissen, wo es konkret scheitert. Ibn Batuta |
|
Verwandte Themen
Die Beliebtesten » |
Die Größten » |
|
Die Neuesten » |
|