# Wertübergabe



## assault (11. Apr 2008)

Hi 
heute hab ich das Problem das ich eine Wertübergabe nicht hinbekomme, die Aufgabe ist ...



> public static Bruch addiere ( Bruch bx, Bruch by ) : Es werden zwei Bruchobjekte als Parameter
> übergeben und das Resultat als neues Bruch-Objekt zrückgeliefert.
> 
> public void invers ( Bruch b ) er übergebene Bruch wird durch Kehrwertbildung verändert.
> ...



Ich hatte jetzt aus der Aufgabe verstanden, dass ich das so machen soll:

Aufruf:

```
b3.addiere(b1, b2);
b3.invers(b3);
b3.wert();
```

und dann in der anderen Klasse:


```
public static Bruch addiere ( Bruch b1, Bruch b2 ){
		b1.zaehler=b1.zaehler*b2.nenner+b2.zaehler*b1.nenner;
		b2.nenner=b1.nenner*b2.nenner;
		Bruch addiere = new Bruch (b1.zaehler, b2.nenner);
		return addiere;
	}

	public void invers (Bruch b){
		b.kehrWert();
	}
	
	public double wert(){
		int nenner = 0;
		int zaehler = 0;
		return nenner = nenner / zaehler;
	}
```

bei dem Teil



```
public static Bruch addiere ( Bruch b1, Bruch b2 ){
		b1.zaehler=b1.zaehler*b2.nenner+b2.zaehler*b1.nenner;
		b2.nenner=b1.nenner*b2.nenner;
		Bruch addiere = new Bruch (b1.zaehler, b2.nenner);
		return addiere;
	}
```
weiß ich durchs debuggen ganz genau, dass er die Berechnung macht und zwar richtig, aber es an der wertübergabe scheitert... was mache ich falsch???


ich persönlich hätte es so gemacht, aber es entspricht nicht der Aufgabe... 

der Aufruf

```
bx.hi(bx.zaehler,bx.nenner);
```

und der Rest:


```
public void hi(double zaehler, double nenner){
			double E=zaehler/ nenner;
			System.out.println("Der Wert: "+ E);
		}
```



EDIT: Hatte gerade nen Geistesblitz der Partläuft jetzt 
	
	
	
	





```
b3.addiere(b1, b2);
```
habs folgendermassen geändert 
	
	
	
	





```
b3 =b3.addiere(b1, b2);
```


----------



## Quaxli (11. Apr 2008)

Da addiere als static deklariert ist, würde ich es so aufrufen:

b3 = Bruch.addiere(b1,b2);

Durch die Deklaration "static" ist die Methode ja sozusagen von einer bestimmten Instanz losgelöst und wird üblicherweise über den Klassenname aufgerufen.

Noch ein Anmerkung am Rande: Die folgenden 2 Zeilen


```
...
      Bruch addiere = new Bruch (b1.zaehler, b2.nenner);
      return addiere;
```

würde ich zusammenfassen:


```
...
  return new Bruch(b1.zaehler, b2.nenner);
```


----------



## assault (11. Apr 2008)

ok thx hab jetzt doch alles zum laufen bekommen ^^


----------



## Quaxli (11. Apr 2008)

Noch ein Anmerkung zu Punkt 2:



> public void invers ( Bruch b ) er übergebene Bruch wird durch Kehrwertbildung verändert.




```
public void invers (Bruch b){
      b.kehrWert();
   }
```


Hier passen meiner Ansicht nach Aufgabe und Methode nicht ganz zusammen. Du hast die Methode als void deklariert, es soll aber ein übergebener Bruch invertiert werden. Daher müßte meiner Ansicht nach ein Bruch zurück gegeben werden. Bzw. wenn die Methode für eine Instanz der Klasse Bruch als void aufgerufen werden soll, dann müßte man keinen Wert übergeben, da man ja Objekt für das die Methode aufgerufen wird, invertiert.
Hast Du das so vorgegeben bekommen?


----------



## assault (11. Apr 2008)

jo,  es ist halt so von der aufgabe vorgegeben , wärs nicht so hätte ichs ja auch anders gemacht ... generel finde ich die aufgaben von den vorgegeben lösungsansätzten ziemlich umständlich


----------

