# Methode mit 2 Rückgabewerten?



## aVoX (9. Apr 2009)

Servus!

Im Gegensatz zu meinem vorigen Thread "Warum funzt Prozedur nicht" weiß ich jetzt schon mehr über Funktionen/Methoden.
In meinem Programm müssen öfters Variablen vertauscht werden, also hab ich - ich bin ja nicht blöd - eine Methode gemacht, die wie folgt aussieht:
[HIGHLIGHT=Java]public class ExampleThree {

 	public static int swap (int a, int b) {
 		int help;
 		help = a;
 		a = b;
 		b = help;
 		return a; return b;
 	}
 	//[...]Noch andere Funzen
 	public static void main (String[] args) {
 		[...]Code[...]
 		swap(sum1, sum2);
 		[...]Code[...]
 	}
}[/HIGHLIGHT]
Nun sollen beide Variablen zurückgegeben werden, da ja beide einen neuen Wert zugewiesen bekommen, jedoch erhalte ich beim zweiten return einen _unreachable statement_ Fehler.
Was tun, damit beide Variablen zurückgegeben werden?


----------



## Noctarius (9. Apr 2009)

return new int[]{ a, b};


----------



## Marco13 (9. Apr 2009)

Irgendwie bringt das ja nichts.

```
...
int temp = a;
a = b;
b = temp;
...
```
vs.

```
...
int x[] = swap(a,b);
a = x[0];
b = x[1];
...
```
Da ist das erste IMHO 100 mal besser.

Deutlich eleganter für diesen speziellen Fall wäre aber IMHO eine Methode

```
private void swap(int array[], int index0, int index1)
{
    int temp = array[index0];
    array[index0] = array[index1];
    array[index1] = temp;
}
```
da für's sortieren ja zwei elemente an bestimmten Positionen innerhalb eines großen Arrays vertauscht werden müssen....


----------



## dayaftereh (9. Apr 2009)

Wir sind doch in Java, warum kein Objekt das zurück gegeben wird? oder zwei Objekte die mitgegeben werden?


----------



## El Jay (9. Apr 2009)

Hallo, nur ein Hinweis am Rande.



aVoX hat gesagt.:


> Nun sollen beide Variablen zurückgegeben werden, da ja beide einen neuen Wert zugewiesen bekommen, jedoch erhalte ich beim zweiten return einen _unreachable statement_ Fehler.



Ich wollte nur darauf hinweisen, dass wenn du in einer deiner Methoden an irgendeiner Stelle "return" aufrufst, verlässt du die Methode. Darum der:_ unreachable statement Fehler_

Gruß,
El Jay


----------



## hdi (9. Apr 2009)

Ich stimme dayaftereh zu.


```
public class IntPair{

   private int i1, i2;

   public IntPair(int i1, int i2){
       this.i1 = i1;
       this.i2 = i2;
   }

   // entweder 2 getter oder einen, der switcht (zB 1->i1, 2->i2 o.ä.)
}
```


```
public static IntPair swap (int a, int b) {
        return new IntPair(b,a);
}
```


----------



## musiKk (9. Apr 2009)

Au ja. Und dann schießen wir noch mit der generischen Kanone drauf, da erwischen wir jeden Spatz. Müssen wir bei den primitiven Typen zwar etwas um uns boxen, aber egal.

```
class Pair<T> {

	private T v1, v2;

	public Pair(T v1, T v2) {
		this.v1 = v1;
		this.v2 = v2;
	}

	public static <T> Pair<T> swap(T v1, T v2) {
		return new Pair<T>(v2, v1);
	}

	@Override
	public String toString() {
		return String.format("[v1:%s v2:%s]", v1.toString(), v2.toString());
	}

}
```
Aber mal im Ernst. Ich halte die Aussage von Marco13 eigentlich für am zutreffendsten. Im Normalfall hat man ja nicht zwei Variablen v1 und v2 und möchte da die Werte tauschen. Da könnte man ja einfach die Bezeichner an den entsprechenden Stellen umdrehn. Klar kennt man nicht jede Anforderung, die irgendwer bei seinem Programm haben kann, aber es fühlt sich irgendwie seltsan an.


----------



## Marco13 (10. Apr 2009)

Ich bin in Anlehnung an den oben erwähnten Thread davon ausgegangen, dass es um das Sortieren eines int-Arrays geht. Da ist IMHO alles, wo ein Objekt erzeugt werden muss, ein no-go....


----------



## hdi (10. Apr 2009)

Achso, ja sicher da hast du Recht. Wenn er echt nur 2 Array-Elemente vertauschen will dann sollte er sich einfach ne kleine Methode machen, so á la:


```
private void swap(int array[], int index0, int index1)
{
    int temp = array[index0];
    array[index0] = array[index1];
    array[index1] = temp;
}
```

...aber das is nur ein Bsp, das mir persönlich jetzt grad eingefallen ist, so nur für mich, ganz speziell in meinem Kopf halt...


----------



## fjord (10. Apr 2009)

[highlight=java]b += a-(a=b);[/highlight]
danach sind a und b auch getauscht. 
dauert aber effektiv länger als mit hilfsvariable.


----------

