# Klausuraufgabe Probleme



## Leno (28. Dez 2010)

Hi liebe Forum Mitglieder ,

ich muss mich für Ende Jan auf eine Java Klausur vorbereiten und habe hier eine Aufgabe die mir leider probleme bereitet. Habe Sie auch gelöst bekommen habe aber leider keine Musterlösung. Mein eigentliches Problem liegt an dem Call by Value Ansatz ( Mache Ich das so richtig ?? also mit der Übergabe des Feldes oder gibt es da andere Möglichkeiten ??? ) 
Ich habe ein Bilde der Aufgabe als link hinterlegt.

DANKE FÜR DIE HILFE AN ALLE ! Kostenloser Bilder Upload Service - Gratis Bilder hochladen / uploaden ohne Anmeldung


```
public class Sammelmappe_Aufgabe9 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub

		double[] a = new double[2];

		double x, y, delta, r;

		x = Double.parseDouble(args[0]);
		y = Double.parseDouble(args[1]);

		kart_nach_polar(a, x, y);

		r = a[0];
		delta = a[1];

		polar_nach_kart(a, r, delta);

	}

	public static double[] kart_nach_polar(double[] a, double x, double y) {

		// double [] a = new double [2];

		// Umwandlung nach r

		double zw = (x * x) + (y * y);

		a[0] = Math.sqrt(zw);
		// Ausgabe von r

		System.out.println("Umrechnung nach r ergbibt " + a[0]);

		// Umwandlung nach delta

		a[1] = Math.atan2(x, y);

		// Ausgabe von Delta

		System.out.println("Umrechnung nach delta ergbibt " + a[1]);

		return a;

	}

	public static double[] polar_nach_kart(double[] a, double r, double delta) {

		a[0] = r * Math.cos(delta); // x Wert
		System.out.println("Umrechnung nach x ergbibt " + a[0]);
		a[1] = r * Math.sin(delta); // y Wert
		System.out.println("Umrechnung nach y ergbibt " + a[1]);

		return a;

	}

}
```


----------



## tagedieb (29. Dez 2010)

Den 
	
	
	
	





```
double[] a
```
 Parameter brauchst du nicht zu uebergeben. Dieser Parmeter ist kein inputfeld sondern soll die Ausgabe geinhalten.

Erstelle in deinen Methoden ein neues 
	
	
	
	





```
double[] a
```
 Objekt, schreib dein rein und gib es zurueck an die aufrufenden Methode. Diese muss das Resultat dann der eigenen localen variabel 
	
	
	
	





```
double[] a
```
 zuweisen, damit du daraus das Resultat und den Input fuer die naechste Methode auslesen kannst.

Den 
	
	
	
	





```
double[] a
```
 Parameter macht nur Sinn, wenn du das Object nur modifizieren moechtest oder du auf den Input angewiesen bist. In deinem Fall berechnest du das Resultat jedesmal neu, deswegen sollte auch der Antwort Array neu erstellt werden.

PS. Methoden-Name schreibt man inCamelCase.
PPS. Wofuer steht das a in 
	
	
	
	





```
double[] a
```
? Array? Antwort? Kein besserer Name eingefallen ist? Benuze sprechende Namen, damit man sieht was gemeint ist. Wer verstaendlichen Code schreibt muss auch weniger kommentieren. Den Professor wirds freuen.


----------



## Leno (29. Dez 2010)

Danke für deine Hilfe. Dennoch habe Ich das ganze noch nicht verstanden , wenn Ich doch in jeder Methode eine neues Feld schreibe dann erzeuge Ich doch ein weiteres Feld was nur innerhalb der Methode sichtbar ist, zudem wenn Ich dieses Feld wieder an die Main übergebe erahlte Ich doch nur den Speicherort ( Wegen dem Call by Value Ansatz ).Ich weiss leider nicht ganz wie Ich das umsetzen soll das es richtig ist ???:L


----------



## tagedieb (29. Dez 2010)

So schwer ist das nicht. Eventuel liest du den Teil der Parameteruebergabe nochmal in deinem Lehrbuch durch..

Wenn du eine Variable in einer Methode definierst kannst du nur in dieser Methode darauf zugreifen. Dies ist eine lokale Variable. Gibts du diese an die aufrufende Methode zurueck kann diese ganz normal auch auf dieselbe Variable zugreifen. Auch wenn nur eine Referenz auf das Objekt uebergeben wird ist das Objekt immer noch an derselben Stelle im Speicher. Java nimmt dir das ab und du musst dich nicht selber darum kuemmern.

I hope this helps!




```
public static void main(String[] args) {

		double x = Double.parseDouble(args[0]);
		double y = Double.parseDouble(args[1]);

                // Call algorithm and store result in local variable
		double[] polar = kartNachPolar(x, y);

		// Ausgabe von r
		System.out.println("Umrechnung nach r ergibt " + polar[0]);

		// Ausgabe von Delta
		System.out.println("Umrechnung nach delta ergibt " + polar[1]);
	}

	public static double[] kartNachPolar(double x, double y) {

		double[] result = new double[2];

 		// Umwandlung nach r
		double zw = (x * x) + (y * y);
		result[0] = Math.sqrt(zw);

		// Umwandlung nach delta
		result[1] = Math.atan2(x, y);

		return result;
	}
```


----------



## Landei (29. Dez 2010)

Oder kürzer:

```
public static double[] kartNachPolar(double x, double y) {
        return new double[]{ Math.hypot(x, y),  Math.atan2(x, y)};
    }
```


----------



## Leno (29. Dez 2010)

Vielen Dank  der Quellcode hat mir sehr geholfen bin noch totaler Java anfänger. Wusste gar nicht das man das so machen kann danke dir @tagedieb  @ landei auch danke , der Prof sieht sowas aber in der Klausur nicht gerne wir sollen uns nur daran halten was auf der Aufgabe steht also dürfen wir keine weiteren Methoden etc nutzen wie z.B. hybot.... das würde er direkt als Punktabzug werten


----------

