Rechnungen mit Werten aus unterschiedlichen Objekten.

Status
Nicht offen für weitere Antworten.

vincent_vega

Mitglied
Hallo!
Bin neu in der OOP und weiß teilweise noch nicht so recht was ich so tun soll...

Ich wollte eine Klasse Bruch schreiben, die mir Objekte erzeugt, die 2 eingegebene Brüche Addiert, Subtrahiert, Dividiert und multipliziert.

Ich habe eine Klasse BruchTest geschrieben, die jeweils 2*2 Werte (d.h. 2 mal Zähler und nenner einließt):
Code:
import EAjava.*;

public class BruchTest {
	static Input eing = new Input();

	public static void main(String[] args) {
		int i,z,n; int[] a=new int[2];int[] b=new int[2];
		do {
			i = eingabe();
			switch (i) {
			case 1:a=werteeingeben();werteausgeben('a',a);break;
			case 2:a=werteeingeben();b=werteeingeben();
			       werteausgeben('a',a);werteausgeben('b',b);break;
			case 3:Bruch bra=new Bruch(a);Bruch brb=new Bruch(b);
			       
			case 4:
			case 0:break;
			}
		} while (i != 0);

	}

	public static int eingabe() {
		System.out.println("Bitte geben Sie eine der folgenden Optionen ein: ");
		System.out.println("0 für aufhören");
		System.out.println("1 für Bruch lesen und ausgeben");
		System.out.println("2 für Bruch a und b lesen und ausgeben");
		System.out.println("3 für a/d/m/s mit den Objektmehtoden");
		System.out.println("4 für a/d/m/s mit den Klassenmethoden");
		int i = eing.readInteger("->");
		return i;
	}
	public static int[] werteeingeben(){
		int[] c=new int[2];
		c[0]=eing.readInteger("Bitte Zähler eingeben: ");
		c[1]=eing.readInteger("Bitte Nenner eingeben: ");
		return c;		
	}
	public static void werteausgeben(char s,int[] c){
		System.out.println("Ausgabe für "+s+": "+c[0]+"/"+c[1]);
	}
}

Das Teilkonstrukt meiner Objekt-Klasse Bruch sieht wie folgt aus:

Code:
public class Bruch {
	int z, n,z1,n1;

	boolean ok;

	Bruch(int[] a) {
		z = a[0];
		n = a[1];
		if (n == 0)
			ok = false;
		else
			ok = true;

	}

	public void kuerze() {
		boolean he=false;
		if (ok){
			for (int i=z>n?n:z;i>0 && he==true;i--){			
				if (n%i==0 && z%i==0){
					n=n/i;z=z/i; he=true;
				}
			}
		}
	}

	public void mult(){
		z1=thisb.z*b.z;
		n1=a.n*b.n;
	}
	public void div(){
		z1=a.z*b.n;
		n1=a.n*b.z;
	}
	public void add(){
		
	}
}

Nun liegt das Problem bei den jeweiligen Rechenoperationen... Wie multipliziere ich die jeweiligen Werte aus den Objekten? Das aktuelle Objekt ruft man ja mit 'this' auf.


Könnt ihr mit helfen?
Gruß
 

Tobias

Top Contributor
Mal exemplarisch an:

Code:
public void mult(){
      z1=thisb.z*b.z;
      n1=a.n*b.n;
   }

b.z und b.n existieren doch gar nicht - woher soll der Computer wissen, was mit b gemeint ist? Und was passiert mit z1 und n1 nach Durchlaufen der Methode - die werden einfach gelöscht!

Code:
public Bruch mult(Bruch b) {
      int[] result = new int[2];
      result[0] = this.z * b.z;
      result[1] = this.n * b.n;

      return new Bruch(result);
}

Diese modifizierte Methode tut folgendes:

Sie nimmt als Parameter einen anderen Bruch entgegen und nennt ihn b (dieser Bruch ist der, mit dem multipliziert werden soll). Anschließend wird die Berechnung durchgeführt und in einem int-Array gespeichert, mit dessen Hilfe anschlie0end ein neuer Bruch konstruiert und zurückgegeben wird - damit mit dem Ergebnis auch was getan werden kann!

mpG
Tobias

P.S.: Schau dir mal das Immutable-Pattern an und informiere dich über den Sinn der Zugriffsspezifizierer. Das sind allerdings Hinweise, die etwas fortgeschrittenere Fragen des Designs behandeln und daher nicht drängend wenn auch wichtig sind.
Exceptions und deren Einsatz wären auch nicht verkehrt zu wissen.

*JA-ERSTER!*
 
B

Beni

Gast
Ganz einfach:
Du hast eine Klasse Bruch, die (oh Wunder) ein Bruch darstellt:
Code:
public class Bruch{
  private int nenner, zaehler;

  public Bruch( int nenner, int zaehler ){
    this.nenner = nenner;
    this.zaehler = zaehler;
  }

  public int getNenner(){
    return nenner;
  }

  public int getZaehler(){
    return zaehler;
  }

  * // Code siehe unten
}

Ich denke, am einfachsten ist es, eine statische Methode z.B. für die Multiplikation zu machen:
Code:
public static Bruch mul( Bruch a, Bruch b ){
  return new Bruch( a.getNenner() * b.getNenner(), a.getZaehler() * b.getZaehler() );
}

Diese Methode kann in einer beliebigen Klasse stehen, die Klasse "Bruch" wäre wohl am passendsten (dort bei dem * einfügen).

Später kannst du die Methode aufrufen indem du...
Code:
Bruch x = ...
Bruch y = ...

Bruch xy = Bruch.mul( x, y );
...schreibst
 

sliwalker

Top Contributor
Hi,

seid ihr alle in einer Klasse?
Schon mindestens zwei Leute hier die das package EAjava.* inkludieren und mit einer Input-Klasse arbeiten :)

SRY ist mir nur mal grad aufgefallen :)

greetz
SLi
 

vincent_vega

Mitglied
Hehe, ja das mag sein. Ein Komilitone erwähnte dieses Forum, und die Klausur naht ;)
EAjava ist ein stupides Paket, welches unser Dozent geschrieben hat, welches die Eingabe ein wenig vereinfacht...
DANKE für die Anworten!

Gruß
 

vincent_vega

Mitglied
So hallo nochmal!

Ich habe nochmal nachgeschaut... Ich soll das in Objektmethoden und darüberhinaus auch noch mit Klassenmethoden realisieren.
Über Klassenmethjoden dürfte eiegtich kein Problem darstellen, wie aber kann ich das über Ojektmethoden realisieren??
GRUSS
 
B

bygones

Gast
Code:
public static Bruch mul( Bruch a, Bruch b ){
  return new Bruch( a.getNenner() * b.getNenner(), a.getZaehler() * b.getZaehler() );
}
das ist ja ein Bsp für eine Klassenmethode

Code:
public void mul( Bruch b ){
  nenner = nenner * b.getNenner();
  zaehler = zaehler * b.getZaehler();
}
wäre ein bsp für eine instanzmethode
 

PoiSoN

Bekanntes Mitglied
vincent_vega hat gesagt.:
EAjava ist ein stupides Paket, welches unser Dozent geschrieben hat, welches die Eingabe ein wenig vereinfacht...
Sowas hat unserer damals auch geschrieben... da gab's dann so tolle Sachen wie "Tastatur.liesString()" oder "Bildschirm.schreib()" :roll:
 

Bleiglanz

Gesperrter Benutzer
normalerweise würde man den Bruch "immuteable" machen

und also die mul Methode als Instanzmethode implementieren, die einfach einen neuen Bruch zurückgibt

siehe BigInteger

Code:
public class Bruch{

  private final int nenner;
  private final int zaehler;

  public Bruch( int nenner, int zaehler ){
    this.nenner = nenner;
    this.zaehler = zaehler;
  }

  public int getNenner(){
    return nenner;
  }

  public int getZaehler(){
    return zaehler;
  }

  public Bruch mul(Bruch b){
  return new Bruch( this.getNenner() * b.getNenner(), this.getZaehler() * b.getZaehler() );
}
}
 

vincent_vega

Mitglied
Ok VIELEN DANK!
Nach 2 1/2 Stunden harten Kopfzerbrechens hab ich nun endlich das Projekt fertig gestellt, und es funktioniert ;)

hab allerdings dire von euch vielfach angeworbenen Instanzmethoden getZaehler und getNennet nicht benutzt, wobei ich diese im Prinzip nicht brauche, da ich der 'Einfachheit' halber mit Srings als Rückgabewert bearbeutet hab:
also z.B.
Code:
	public String mult(Bruch b) {
		if (this.istGueltig() & b.istGueltig()) {
			Bruch help = new Bruch(this.z * b.z, this.n * b.n);
			help.kuerze();
			return "Division ergibt: " + toStringg() + " - " + b.toStringg()
					+ " = " + help.toStringg();
		} else
			return "Division ist nicht möglich!";
	}

Vielen Dank nochmal!
gruß
vincent_vega
 
G

Guest

Gast
Mit Strings zu arbeiten ist nicht sehr objektorientiert... Was machst du, wenn du einen Term wie (1/2 - 1/4 * 1/8) berechnen willst?

Und die Methoden getNenner() und getZähler() sind Ausdruck eines wesentlichen Prinzips der OO Programmierung: Information-hiding. Stell dir vor, du möchtest beim Zugriff auf Nenner oder Zähler überprüfen, ob der Bruch gekürzt worden ist - das ist ohne getter-Methode so unmöglich (Es gibt natürlich andere Wege, aber ich denke, es wird deutlich, was ich meine).

mpG
Tobias
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Rechnungen-Aufgabe Java Basics - Anfänger-Themen 18
B Fachliche Frage bei Rechnungen Java Basics - Anfänger-Themen 16
B Frage zu Datenbank Design - Rechnungen, Angebote... und deren Positionen Java Basics - Anfänger-Themen 4
J Klassen Rechnungen Java Basics - Anfänger-Themen 3
W BigDecimal bei Rechnungen Java Basics - Anfänger-Themen 5
R Rechnungen erstellen per Java auf Din A4 Java Basics - Anfänger-Themen 11
G Rundungsfehler bei bestimmten Rechnungen? Java Basics - Anfänger-Themen 2
G Ungenauigkeit bei Rechnungen Java Basics - Anfänger-Themen 2
A Daten aus einer HashMap aus einer DB speichern und mit neuen Werten vergleichen Java Basics - Anfänger-Themen 8
N Array beim erstellen mit Werten füllen Java Basics - Anfänger-Themen 6
M Kommandozeilenparamter als EINEN String werten Java Basics - Anfänger-Themen 5
T PDF-Formula (XFDF) via Mail - Betreff mit Werten aus PDF-Formular ergänzen Java Basics - Anfänger-Themen 2
A Werten aus dem Text ausliesten Java Basics - Anfänger-Themen 6
Csircc Neuer Array mit geringerer Länge und selben werten. Java Basics - Anfänger-Themen 2
M Wie kann eine Methode (string) eine andere Methode (void) mit zufälligen int-Werten aufrufen? Java Basics - Anfänger-Themen 4
U Erste Schritte nextGaussian zwischen zwei Werten Java Basics - Anfänger-Themen 19
C Methode Grouping mit Werten ausgeben Java Basics - Anfänger-Themen 2
J Java Queue mit default Werten erstellen Java Basics - Anfänger-Themen 4
W Mehrfach das gleiche Attribut für ein Objekt erzeugen (mit verschiedenen Werten) Java Basics - Anfänger-Themen 2
D Input/Output fehlerhafter Algorithmus zum Ersetzen von Array-Werten nach logischem Schema Java Basics - Anfänger-Themen 1
M Arrays mit mehreren Werten über JOptionPane initialisieren Java Basics - Anfänger-Themen 12
K Übergabe von Werten (zweidimensionales Array) aus einer Methode an zweidimensionales Array in main() Java Basics - Anfänger-Themen 3
N Speichern von Werten in Variablen nach Schließen des Programms Java Basics - Anfänger-Themen 3
O zwei Arrays nach Werten durchsuchen und zusammenfügen Java Basics - Anfänger-Themen 3
B Rückgabe von zwei Werten: String und double Java Basics - Anfänger-Themen 14
Henri Vergabe von undeklarieten Werten Java Basics - Anfänger-Themen 64
V Schleife für das Einlesen von Werten für int Variablen, die Bestandteil von Arrays sein sollen Java Basics - Anfänger-Themen 16
E OOP Array anlegen mit unterschiedlichen Werten Java Basics - Anfänger-Themen 8
R Eingabe String umwandeln zu Integer Werten Java Basics - Anfänger-Themen 8
M Speichern von Werten in Array Java Basics - Anfänger-Themen 1
P Input/Output Bestimmte Anzahl von Werten in einem Array an Methode übergeben Java Basics - Anfänger-Themen 2
M Übergabe von Werten Java Basics - Anfänger-Themen 10
Bregedur Methoden Matcher und Pattern bei sich wiederholenden Werten Java Basics - Anfänger-Themen 1
M Java Arrays mit Werten initialisieren Java Basics - Anfänger-Themen 3
G Interpolation von Werten im 3D-Raum Java Basics - Anfänger-Themen 3
N Zählen von Rationalen Werten eines Arrays Java Basics - Anfänger-Themen 10
R Objekt erstellen - Attribute mit mehreren Werten Java Basics - Anfänger-Themen 1
F JButton [] mit Werten hinterlegen Java Basics - Anfänger-Themen 10
L Frage zur Rückgabe von Werten bei Methoden Java Basics - Anfänger-Themen 4
L Array mit Werten belegen Java Basics - Anfänger-Themen 7
Crazynet jTable erste Zeile mit deffinierten Werten Java Basics - Anfänger-Themen 0
J JFrame ausgabe von Werten Java Basics - Anfänger-Themen 9
F Array mit Scanner-Werten Java Basics - Anfänger-Themen 4
W Klassen [GELÖST] Objekte während der Laufzeit mit neuen veränderten Werten beliebig oft initialisieren Java Basics - Anfänger-Themen 2
J ArrayList<int[]> wird beim hinzufügen von werten komplett überschrieben warum? Java Basics - Anfänger-Themen 1
GreyFox Object dynamisch mit werten versehen. Java Basics - Anfänger-Themen 4
C Arrays zusammenfügen mit abwechselnden Werten Java Basics - Anfänger-Themen 3
F Map nach Werten durchsuchen Java Basics - Anfänger-Themen 3
S Suche richtigen Typ für Variabel mit den Werten (neu, gebraucht, beschädigt) Java Basics - Anfänger-Themen 7
V Methoden Matrix als 1D Array mit Werten füllen Java Basics - Anfänger-Themen 12
T Liste mit 2 Werten pro Eintrag Java Basics - Anfänger-Themen 9
F Effizientes Lesen von 65 Datein mit Boolean Werten Java Basics - Anfänger-Themen 6
A OOP Buchstaben mit ASCII Werten darstellen Java Basics - Anfänger-Themen 1
M Ausgeben eines 2D Arrays mit int UND String werten - BLUEJ! Java Basics - Anfänger-Themen 4
V Anzahl von gleichen Werten in einem Int-Array ermitteln Java Basics - Anfänger-Themen 4
M Mit Werten aus Arrays in anderen Methoden rechnen? Java Basics - Anfänger-Themen 3
D Sortieren von int Werten von Objekten in einer LinkedList, kann nicht auf int Werte zugreifen Java Basics - Anfänger-Themen 3
L Array - Nach 2 gleichen Werten stoppen Java Basics - Anfänger-Themen 5
N mit Werten aus einer mysql datenbank in java rechnen Java Basics - Anfänger-Themen 17
X Methoden Vertauschen von 2 Werten eines Arrays Java Basics - Anfänger-Themen 13
J Subtraktion von double Werten Java Basics - Anfänger-Themen 3
P Objekt mit Werten aus Array füllen Java Basics - Anfänger-Themen 10
P Vererbung Auslesen von Werten einer ArrayList Java Basics - Anfänger-Themen 30
S Erfahrungswerte von schnelles durchlaufen von Listen mit 2 Werten Java Basics - Anfänger-Themen 10
T Externes Programm mit Werten versorgen Java Basics - Anfänger-Themen 4
T Ausgabe von Werten des Typs double Java Basics - Anfänger-Themen 8
J Zuweisung von gesicherten Werten funktioniert nicht Java Basics - Anfänger-Themen 9
P Methoden Übergabe von Werten Java Basics - Anfänger-Themen 7
D Regex mit Werten aus txt Datei Java Basics - Anfänger-Themen 2
C Mit if Überprüfung von drei Werten durchführen Java Basics - Anfänger-Themen 6
C Comparator mit Double Werten? Java Basics - Anfänger-Themen 12
J Datentypen Fehler bei Berechnung mit Double und Int-Werten Java Basics - Anfänger-Themen 22
T Hashmap mit mehreren Werten Java Basics - Anfänger-Themen 9
B Zweidimensionales Array mit boolean Werten Java Basics - Anfänger-Themen 3
F grafische Anzeige von Werten Java Basics - Anfänger-Themen 2
darekkay Datentypen HashSet bzw. LinkedList mit Werten initialisieren Java Basics - Anfänger-Themen 3
U Datentypen Ungenauigkeit von Double Werten Java Basics - Anfänger-Themen 5
L Datentypen Methode zum Abspeichern von Variablen mit größeren int-Werten Java Basics - Anfänger-Themen 6
Rudolf Datentypen Vectorliste mit Werten in zufälliger Anordnung Java Basics - Anfänger-Themen 5
1 Ständige Abfrage von Werten Java Basics - Anfänger-Themen 19
M Image zeichenen mit Double Werten Java Basics - Anfänger-Themen 4
J double-Array mit Werten von Methode füllen und an andere Methode übergeben Java Basics - Anfänger-Themen 3
S Minimum von 5 Werten Java Basics - Anfänger-Themen 6
H Checkbox mit Werten hinterlegen Java Basics - Anfänger-Themen 4
P Initialisierung einer 5*5 Matrix mit best. Werten Java Basics - Anfänger-Themen 2
M property mit mehreren werten Java Basics - Anfänger-Themen 3
F Speicherung von Werten?!? Java Basics - Anfänger-Themen 7
L Array - Eingabe von Werten Java Basics - Anfänger-Themen 2
S mit Werten aus 2D-Array rechnen Java Basics - Anfänger-Themen 32
C ArrayList mit Integer Werten Java Basics - Anfänger-Themen 6
babel ein Vector mit verschiedenen Werten auslesen und berechnen Java Basics - Anfänger-Themen 34
S Elemente einer Liste mit true / false Werten Java Basics - Anfänger-Themen 3
X reele Zahlen zwischen zwei Werten addieren Java Basics - Anfänger-Themen 11
E Übergabe von werten aus einem JDialog Java Basics - Anfänger-Themen 4
G art hashmap mit mehreren werten pro key Java Basics - Anfänger-Themen 2
S Ausgabe von Werten Java Basics - Anfänger-Themen 25
D Brauche Hilfe: Funktion zum Kombinieren von Werten Java Basics - Anfänger-Themen 5
G Eintragen von Werten in die DB Java Basics - Anfänger-Themen 3
C Chart mit zwei Datenlinien und überlagernden Werten Java Basics - Anfänger-Themen 3
A Referenzen zu festen Werten machen? Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben