# Notfall Methoden



## wer_bin_ich (13. Dez 2011)

Hallo, ich habe einen Notfall ich muss zu morgen eine Aufgabe fertig haben. Wär echt super, wenn ihr mir ein bisschen helfen könntet 

Also ich soll 4 Methoden verlgeichen die zwei Zahlen vertauschen.  
a) Dabei soll ich mir ein gültiges Java-Fragment als Aufruf der Methoden überlegen.
b) Ich soll erklären aus welchen Gründen einige Methoden die Zahlen korrekt vertauschen und andere nicht. Und warum manche nur bei bestimmte Zahlen richtig vertauschen(bei angenommern korreketer methode)
c) Bei tausche3 soll ich einen allgemenen Nachweis, machen dass ich eine korrekte Arbeitsweise habe.


```
public static void tausche1(int a, int b) {
int c = a;
a = b;
b = c;
}
```


```
public static void tausche2(int[] a) {
int c = a[0];
a[0] = a[1];
a[1] = c;
}
```


```
public static void tausche3(int[] a) {
a[0] = a[1] - a[0];
a[1] = a[1] - a[0];
a[0] = a[1] + a[0];
}
```


```
public static void tausche4(int[] a) {
int[] c = new int[a.length];
c[0] = a[1];
c[1] = a[0];
for (int i=2; i<a.length; i++) {
c[i] = a[i];
}
a = c;
}
```

SOOO
a)
also als erstes weiß ich garnicht, was die mit java-Fragment meinen? Soll ich einfach nen Programm schreiben, wo die Methode dann aufgerufen wird???

b)
Erstmal tauschen alle methoden natürlch nur bestimmte zahlen, da alle vom typ Integer sind:
Tausche1 und tausche2 sollte funktionieren.
Tausche3 iwie nicht. bin es mal mit nem beispiel durchgegangen und irgendwie kommt dann was anderes raus :/
tausche 4 leuchtet mir iwie nicht ein 
was besagt denn diese hier:

for (int i=2; i<a.length; i++) {
c_ = a;
}
a = c;
 dass er felder erzeugt bis a.length, aber warum soll dann c=a sein?

c)tja einen allgemeinen nachweis woll die? bestimmt so richtig mit x und y...



		Java:In die Zwischenablage kopieren


public static void tausche3(int[] a) {
//lese zahlen x und y
//sei dabei a[0]=x und a[1]=y
a[0] = a[1] - a[0];
//x = y-x
a[1] = a[1] - a[0];
//y = y - (y-x) 
a[0] = a[1] + a[0];
//(y-x) = (y-(y-x)) + (y-x)
// dann folgt (y-x) = y- 2x
// rauskommen sollte jetzt x=y und y=x durch umformen erhält man aber
//y=y-x und x=2x
}


ich hoffe das reicht so. 
Wie gesagt ich muss das abgebn und bin nich so der Überflieger :/_


----------



## Final_Striker (13. Dez 2011)

wer_bin_ich hat gesagt.:


> a)
> also als erstes weiß ich garnicht, was die mit java-Fragment meinen? Soll ich einfach nen Programm schreiben, wo die Methode dann aufgerufen wird???



Du sollst ein kleines Programm schreiben, das diese Methode verwendet.


----------



## wer_bin_ich (13. Dez 2011)

ah gut dacht ich mir ja schon fast, dann hol ich mir mal ne tüte chips und versuchs 
vielen dank


----------



## Xeonkryptos (13. Dez 2011)

wer_bin_ich hat gesagt.:


> Tausche3 iwie nicht. bin es mal mit nem beispiel durchgegangen und irgendwie kommt dann was anderes raus :/



Vielleicht, weil du in der ersten Zeile innerhalb der Methode den Wert an der Stelle 0 im Array änderst, aber wohl mit dem alten Wert aus der Übergabe rechnen willst, dies jedoch nicht mehr möglich ist, weil dieser mit einem anderen "ausgetauscht" bzw ersetzt wurde und in der zweiten Zeile verwendest du nun den neuen int-Wert in a[0] und nicht den zuvor übergebenen alten. Möglicherweise ist das fehlerhaft.



wer_bin_ich hat gesagt.:


> was besagt denn diese hier:
> 
> for (int i=2; i<a.length; i++) {
> c_ = a;
> ...


_

Das besagt aus, dass die Schleife bei 2 beginnt zu zählen, solange i kleiner als die Länge von a ist und nach jedem Durchlauf zählt er um 1 weiter (das i natürlich!). In der Schleife werden dann alle passenden a-Stellen in die passenden c-Stellen geschrieben._


----------



## Kiri (13. Dez 2011)

```
public static void tausche3(int[] a) 
    {
        a[0] = a[1] - a[0];
        a[1] = a[1] - a[0];
        a[0] = a[1] + a[0];
    }
```

funktioniert einwandfrei


----------



## Xeonkryptos (13. Dez 2011)

Kiri hat gesagt.:


> funktioniert zum Beispiel bei a[0] = 1; a[1] = 2;



Ich gehe mal davon aus, dass es nur funktioniert, wenn im ersten Feld des Arrays die kleinere Zahl von beiden vorhanden ist, denn sonst rutscht es ganz schnell in den negativen Bereich rein und das Ergebnis wird verfälscht.

Ist jetzt mein Gedankengang, worin der Fehler liegen könnte.


----------



## Kiri (13. Dez 2011)

bei mir läuft tausche3 einwandfrei egal ob der erste oder zweite Wert kleiner ist, selbst bei negativen Zahlen funktioniert es


----------



## wer_bin_ich (13. Dez 2011)

Viel Dank für eure Antworten!:toll:

@FinalStriker
ich habe mal tausche2 versucht


```
public class bsp {

	public static void tausche2(int[] a) {
		int c = a[0];
		a[0] = a[1];
		a[1] = c;
		
	}
	
	public static void main (String[] args){
	
	if (args.length!=2)
		System.out.println("Bitte geben Sie 2 ganze Zahlen als Kommandozeilenparamenter an!");
	else{
		try{
			System.out.println(String.valueOf(tausche2(Integer.parseInt(args[0]),Integer.parseInt(args[1]))));
		} catch (NumberFormatException error){
			System.out.println("Bitte geben Sie 2 ganze Zahlen als Kommandozeilenparamenter an!");
		}
	} 
    }
}
```
mh nur leider bekomm ich dann die fehlermeldung, bei

System.out.println(String.valueOf(tausche2(Integer.parseInt(args[0]),Integer.parseInt(args[1]))));

dass tausche2 nicht "applicable for the argument" ist
hm gibt die methode denn was zurück? oder muss ich noch iwie 
return a[0], a[1] oder sowas schrieben?
hm vllt auch ien bisschen zu kompliziert:/ 


@Xeonkryptos und Kiri
also funktioniert die Methode taushce 3 nicht, und Kiris Beispiel wäre nur ein zufall? ich glaube, dass die Methode nicht funktioniet, wenn a[0]> a[1] ist.
kann das sein?

Ber echt super von euch, dass ihr so schnell antwortet :]


----------



## Xeonkryptos (13. Dez 2011)

Kiri hat gesagt.:


> bei mir läuft tausche3 einwandfrei egal ob der erste oder zweite Wert kleiner ist, selbst bei negativen Zahlen funktioniert es



Kann gut möglich sein. Hab es nicht ausgetestet, aber wenn der TO irgendwelche Probleme hat, bin ich von einer zu Anfang falschen Logik ausgegangen bzw. von einer nur eingeschränkt möglichen Überprüfung, aber anscheinend liegt es nicht am Code, wohl eher am TO selbst.


----------



## Kiri (13. Dez 2011)

Implementiere sie und probiere es aus. Ich habe einige Varianten versucht, alle haben geklappt.

Edit: Zu Beginn dachte ich, diese Methode tausche3 funktioniert nur in bestimmten fällen. Habe aber keinen Fall gefunden, der nicht funktioniert!


----------



## wer_bin_ich (13. Dez 2011)

oh da war ich wohl etwas langsam beim eintippen 
also tausche3 geht glaube ich nicht bei 3 und 2

edit: ja ok geht doch


----------



## Kiri (13. Dez 2011)

wer_bin_ich hat gesagt.:


> also tausche3 geht glaube ich nicht bei 3 und 2



Doch geht, lass das vermuten. Probiere es aus!


----------



## Xeonkryptos (13. Dez 2011)

Hier mal eine Überarbeitung, damit dein Code wunderbar funktioniert: deine Bsp-Klasse:


```
public class Bsp {

	public static int[] tausche2(int... a) {
		int c = a[0];
		a[0] = a[1];
		a[1] = c;
		return a;
	}

	public static void main(String[] args) {

		if (args.length != 2)
			System.out
					.println("Bitte geben Sie 2 ganze Zahlen als Kommandozeilenparamenter an!");
		else {
			try {				
				int[] a = tausche2(Integer.parseInt(args[0]), Integer.parseInt(args[1]));
				for (int b : a) {
					System.out.println(b);
				}
			} catch (NumberFormatException error) {
				System.out
						.println("Bitte geben Sie 2 ganze Zahlen als Kommandozeilenparamenter an!");
			}
		}
	}
}
```

Du hast den Fehler gemacht, dass du in deiner Parameterliste nach einem Array verlangst. Nun musst du auch ein Array übergeben, du versuchst aber zwei Int-Werte zu übergeben und das ist bei deinem Beispiel nicht möglich. 2 einzelne Werte sind kein Array!!


----------



## wer_bin_ich (13. Dez 2011)

hm... aber laut aufgabestellung hört es sich so an, als ob nicht alle methoden die zahlen richtig vertauschen und manche nur bei bestimmten zahlen :/ jetzt bin ich verwirrt, wenn alle gehen

demnach wäre aber auch mein allgemeiner nachweis bei tausche3 verkehrt... hm muss ich wohl nochmal drüberschauen.

OHH viel Dank Xeonkryptos. jetzt wo du das sagst is es logisch:toll:
dann versuch ich schnell noch alle anderen


----------



## Xeonkryptos (13. Dez 2011)

Gehe aber nicht zu 100% davon aus, dass irgendwo ein Fehler sein muss. Teste es einfach aus, ob du irgendeinen Fehler findest und wenn nicht, dann gibt es keinen und sie wollten dich mit der Aufgabe nur verwirren!

BTW: Die tasuche4-Methode kann GAR NICHT funktionieren, denn du hast eine Schleife, die mit ihrem Zähler auf 2 steht und das schon die max Größe der Arrays ist und dann noch hochzählt! Dir fliegt hier eine ArrayIndexOutOfBoundsException um die Ohren, weswegen diese wohl nicht funktioniert! Mal von der restlichen Logik abgesehen.


----------



## Kiri (13. Dez 2011)

Xeonkryptos hat gesagt.:


> BTW: Die tasuche4-Methode kann GAR NICHT funktionieren, denn du hast eine Schleife, die mit ihrem Zähler auf 2 steht und das schon die max Größe der Arrays ist und dann noch hochzählt! Dir fliegt hier eine ArrayIndexOutOfBoundsException um die Ohren, weswegen diese wohl nicht funktioniert! Mal von der restlichen Logik abgesehen.



Jein - die Methode funktioniert, der Inhalt der for-Schleife wird einfach nicht ausgeführt und das ist auch gut so, da sonst zweimal getauscht wir und wieder alles beim alten ist!


----------



## wer_bin_ich (13. Dez 2011)

so tausche3 funzt also auch als aufruf


```
Tausche3
public class bsp {
 
  
	public static int[] tausche3(int... a) {
		a[0] = a[1] - a[0];
		a[1] = a[1] - a[0];
		a[0] = a[1] + a[0];
	return a;	
	}
	
 
    public static void main(String[] args) {
 
        if (args.length != 2)
            System.out
                    .println("Bitte geben Sie 2 ganze Zahlen als Kommandozeilenparamenter an!");
        else {
            try {               
                int[] a = tausche3(Integer.parseInt(args[0]), Integer.parseInt(args[1]));
                for (int b : a) {
                    System.out.println(b);
                }
            } catch (NumberFormatException error) {
                System.out
                        .println("Bitte geben Sie 2 ganze Zahlen als Kommandozeilenparamenter an!");
          }
        }
      }
   }
```

nur tausche 1 macht mir noch schwierigkeiten

```
public class bsp {

	public static int tausche1(int a, int b) {
	int c = a;
	a = b;
	b = c;
	return a;
	}
 
 
    public static void main(String[] args) {
 
        if (args.length != 2)
            System.out
                    .println("Bitte geben Sie 2 ganze Zahlen als Kommandozeilenparamenter an!");
        else {
            try {               
                int[] a = tausche1(Integer.parseInt(args[0]), Integer.parseInt(args[1]));
                for (int b : a) {
                    System.out.println(b);
                }
            } catch (NumberFormatException error) {
                System.out
                        .println("Bitte geben Sie 2 ganze Zahlen als Kommandozeilenparamenter an!");
          }
        }
      }
   }
```

bei
int[] a = tausche1(Integer.parseInt(args[0]), Integer.parseInt(args[1]));
muss ich wohl etwas anderes machen, wei ich ja in der methode keine Felder habe... oder muss ich in der methode die variablen als felder angeben?


und bei tausche4

```
public static void tausche4(int[] a) {
int[] c = new int[a.length];
c[0] = a[1];
c[1] = a[0];
for (int i=2; i<a.length; i++) {
c[i] = a[i];
}
a = c;
}
```
 heißt das Xeonkryptos, dass ich den zähler höher setzen muss, als 2 damit es funktionert?

entschuldigt die vielen fragen


----------



## Kiri (13. Dez 2011)

die 4 Methoden funktionieren alle so wie sie sind, also lass die Finger davon.

hier das Beispiel, wie getestet habe:


```
public class Tauschen {
    public static void main(String[] args) {
        
        int[] arr = new int[2];
        int a=0, b=0;
        arr[0] = -33;
        arr[1] = -233;
        a = arr[0]; 
        b = arr[1];
        tausche1(a, b);
        tausche2(arr);
        tausche3(arr);
        tausche4(arr);
    }
    
    public static void tausche1(int a, int b) 
    {
        System.out.println("********************************************");
        System.out.println("**************tausche1 vorher:**************");
        System.out.println("a:" + a);
        System.out.println("b:" + b);
        int c = a;
        a = b;
        b = c;
        System.out.println("**************tausche1 nacher:**************");
        
        System.out.println("a:" + a);
        System.out.println("b:" + b);
        System.out.println("********************************************");
    }
    
    public static void tausche2(int[] a) 
    {
        System.out.println("********************************************");
        System.out.println("**************tausche2 vorher:**************");
        System.out.println("a[0]:" + a[0]);
        System.out.println("a[1]:" + a[1]);
        int c = a[0];
        a[0] = a[1];
        a[1] = c;
        System.out.println("**************tausche2 nacher:**************");
        
        System.out.println("a[0]:" + a[0]);
        System.out.println("a[1]:" + a[1]);
        System.out.println("********************************************");
    }
    
    public static void tausche3(int[] a) 
    {
        System.out.println("********************************************");
        System.out.println("**************tausche3 vorher:**************");
        System.out.println("a[0]:" + a[0]);
        System.out.println("a[1]:" + a[1]);
        
        a[0] = a[1] - a[0];
        a[1] = a[1] - a[0];
        a[0] = a[1] + a[0];
        
        System.out.println("**************tausche3 nacher:**************");
        
        System.out.println("a[0]:" + a[0]);
        System.out.println("a[1]:" + a[1]);
        System.out.println("********************************************");
    }
    
    public static void tausche4(int[] a) 
    {
        System.out.println("********************************************");
        System.out.println("**************tausche4 vorher:**************");
        System.out.println("a[0]:" + a[0]);
        System.out.println("a[1]:" + a[1]);
        int[] c = new int[a.length];
        c[0] = a[1];
        c[1] = a[0];
        for (int i=2; i<a.length; i++) 
        {
            c[i] = a[i];
        }
        a = c;
        System.out.println("**************tausche4 nacher:**************");
        
        System.out.println("a[0]:" + a[0]);
        System.out.println("a[1]:" + a[1]);
        System.out.println("********************************************");
    }
}
```

EDIT:
Wenn du die Werte eingeben willst, dann kommentiere 6 und 7 aus!


----------



## Xeonkryptos (13. Dez 2011)

wer_bin_ich hat gesagt.:


> bei
> int[] a = tausche1(Integer.parseInt(args[0]), Integer.parseInt(args[1]));
> muss ich wohl etwas anderes machen, wei ich ja in der methode keine Felder habe... oder muss ich in der methode die variablen als felder angeben?



Du müsstest hier entweder mit einer Array intern in der Methode arbeiten, indem du die geänderten Werte speicherst oder du verwendest Instanzvariablen, die dann den Wert übergeben bekommen und du dir damit das return sparst.



wer_bin_ich hat gesagt.:


> und bei tausche4 heißt das Xeonkryptos, dass ich den zähler höher setzen muss, als 2 damit es funktionert?



Nein. Du musst den Zähler auf 0 setzen, damit du keine Exception bekommst.



wer_bin_ich hat gesagt.:


> entschuldigt die vielen fragen



"Wer nicht fragt bleibt dumm!" Ein wohl bekannter Spruch mit einem wahren Gehalt! Man kann nie zu viel, sondern nur zu wenig fragen!


----------



## Xeonkryptos (13. Dez 2011)

Kiri hat gesagt.:


> die 4 Methoden funktionieren alle so wie sie sind, also lass die Finger davon.
> 
> 
> ```
> ...



Stimmt ja wohl nicht ganz! Du hast in der Methode tausche4 den Schleifenzähler geändert, was bedeutet, dass du die von mir erwähnte Exception umgehst! In der Logik sind die Methoden richtig, aber das hast du nicht mit einer Exception getestet!!!

Edit: Okay, mich wundert es gerade, dass die Schleife gar nicht ausgeführt wird. ich bekomme keine Exception, aber die Schleife wird auch nicht betreten, also ist die eigentlich unnötig oder man ändert den Zähler auf 0 und entfernt die Zuweisung "a = c;".


----------



## Kiri (13. Dez 2011)

Xeonkryptos hat gesagt.:


> Nein. Du musst den Zähler auf 0 setzen, damit du keine Exception bekommst.



Sorry, das ist Quatsch. Es gibt keine Exception, sondern die Schleife wird beendet. Setzt du den Zähler auf 0 dann wird das Ergebnis falsch!


----------



## Kiri (13. Dez 2011)

Sorry, habe es zum testen geändert und nicht wieder Rückgängig gemacht. 0 ist falsch!!! Es muss i = 2 heißen.



```
for (int i=2; i<a.length; i++)
```

Wenn i nicht 2 werden dürfte, wann wird deiner Meinung nach dann eine Schleife beendet?


----------



## Xeonkryptos (13. Dez 2011)

Kiri hat gesagt.:


> Sorry, habe es zum testen geändert und nicht wieder Rückgängig gemacht. 0 ist falsch!!! Es muss i = 2 heißen.



Oder gar die Schleife entfernen, weil diese keinen Sinn macht.

Außerdem ist in so einem Fall normalerweise davon auszugeben, dass wenn man auf ein Array zugreifen will, welches in einem Wertebereich geschieht, der nicht definiert ist, sei es, weil dieser zu groß oder zu klein gewählt wurde, ist es normal davon auszugehen, dass du eine IndexOufOfBoundsException bekommst und davon bin ich ausgegangen!

Edit: Okay... jetzt hab ich nen Fehler gemacht. Ich hab vollkommen ignoriert, dass die Bedingung zu Beginn der Schleife nicht erfüllt wird und deshalb kein Tritt in die Schleife selbst gemacht wird. Da hab ich mal kurz nicht aufgepasst, dennoch macht es keinen Sinn, dort solch eine Schleife einzubauen!


----------



## Kiri (13. Dez 2011)

Xeonkryptos hat gesagt.:


> Oder gar die Schleife entfernen, weil diese keinen Sinn macht.



Da stimme ich dir vollkommen zu. Aber die Aufgabe war ja glaube ich nicht, die Methoden zu verbessern, sonst herauszufinden, ob Sie funktionieren.

Es macht ja auch keinen Sinn, 4 Methoden zu haben, die alle das gleiche Ergebnis liefern ;-)


----------



## Kiri (13. Dez 2011)

Beim nächsten Mal korrigierst Du mich! Für heute reicht es glaub ich ;-)


----------



## wer_bin_ich (13. Dez 2011)

oh man ich kann echt kaum glauben, wieviel mühe ihr euch hier gebt. Dickes Dankeschön an euch:toll:
Dann weiß ich was ich zu tun habe.
ok und bei tausche4 ist die ausgangsmethode nun richtig oder nun nicht?:bahnhof:
die methode von kiri mit i=2 ist richtig 



Eine Frage, kann man einen allgemeinen Nachweis von tausche3 denn so mit x und y machen?


----------



## Xeonkryptos (13. Dez 2011)

Kiri hat gesagt.:


> Es macht ja auch keinen Sinn, 4 Methoden zu haben, die alle das gleiche Ergebnis liefern ;-)



Das ist wieder relativ zu sehen.  Anfänger in der Programmierung sollen mehrere Möglichkeiten vor die Nase bekommen, die dasselbe Ergebnis liefern, aber eine andere Herangehensweise aufzeigen, doch auch nur Code, der Sinn macht, ist meiner Meinung nach zu verwenden. Codeschnispel/-fragmente die nicht einmal eine Funktion erfüllen (siehe die Schleife, die diesbezüglich keinen Sinn gemacht hat und ich den Punkt übersah.  ) gar wegzulassen, sonst denken die, das man dies damit löst, es aber falsch ist.


----------



## wer_bin_ich (13. Dez 2011)

achso ok also bei tausche4 die methode völlig überflüssig


edit: man was schreib ich denn für einen Müll.
Ich meinte, dass die schleife unnötig ist...?


----------



## Kiri (13. Dez 2011)

Xeonkryptos hat gesagt.:


> Das ist wieder relativ zu sehen.  Anfänger in der Programmierung sollen mehrere Möglichkeiten vor die Nase bekommen, die dasselbe Ergebnis liefern, aber eine andere Herangehensweise aufzeigen, doch auch nur Code, der Sinn macht, ist meiner Meinung nach zu verwenden. Codeschnispel/-fragmente die nicht einmal eine Funktion erfüllen (siehe die Schleife, die diesbezüglich keinen Sinn gemacht hat und ich den Punkt übersah.  ) gar wegzulassen, sonst denken die, das man dies damit löst, es aber falsch ist.



Klar zum Lernen ist das gut! Nimmt man diese Schleife und setzt i = 0, dann wird ja auch getauscht, nur halt einmal zu viel.

Alle Methoden funktionieren korrekt auch tausche4!


----------



## Xeonkryptos (13. Dez 2011)

wer_bin_ich hat gesagt.:


> ok und bei tausche4 ist die ausgangsmethode nun richtig oder nun nicht?:bahnhof:
> die methode von kiri mit i=2 ist richtig



Die Methode ist richtig! Nur kannst du die Schleife entfernen, da diese erst gar nicht zum Einsatz kommt. Der Schleifenrumpf wird schon durch die nicht erfüllte Bedingung (Zähler 2 ist nicht mehr kleiner als Größe des Arrays (auch 2)) betreten und unnötiger Code, den man ohne Probleme löschen kann, aber auch drin behalten, wie man es mag. Nur darf die Schleife niemals ausgeführt werden, denn sonst verfälscht es durch die untere Zuweisung das Ergebnis.
Aber das ist in deinem Beispiel egal. =)



wer_bin_ich hat gesagt.:


> Eine Frage, kann man einen allgemeinen Nachweis von tausche3 denn so mit x und y machen?



Wenn ich jetzt wüsste, wie du das meinst? x und y sind oftmals Platzhalter: in der Programmierung Variablen. Und ein Beispiel aus reinen Variablen hast du in tausche1.

Weiß nicht, was du damit willst. :bahnhof:


----------



## Kiri (13. Dez 2011)

wer_bin_ich hat gesagt.:


> achso ok also bei tausche4 die methode völlig überflüssig



nicht die Methode, sondern die for-Schleife samt Inhalt! (Sie wird eh nicht ausgeführt!)


----------



## wer_bin_ich (13. Dez 2011)

genau kiri. ich meinte die Schleife...

nun ja ich glaube ich soll einen allgemeinen Mathematischen Beweis liefern, dass die Methode richtig ist.
aber auch nicht weiter schlimm, mit dem was ihr geschrieben habt, bin ich erstmal gut dran


----------



## Xeonkryptos (13. Dez 2011)

Kiri hat gesagt.:


> Klar zum Lernen ist das gut! Nimmt man diese Schleife und setzt i = 0, dann wird ja auch getauscht, nur halt einmal zu viel.
> 
> Alle Methoden funktionieren korrekt auch tausche4!



Ich habe gegen Ende auch nicht behauptet, dass keiner der Methoden nicht korrekt funktioniert!

Klar ist das vlt für das Lernen gut, aber welcher Anfänger schaut sich so genau die for-Schleife an, wenn er den Code vorgelegt bekommt und in einem Testdurchlauf alles super läuft? Ich hätte das früher bestimmt nicht getan!

Wenn man die for-Schleife in eine andere Methode gesteckt hätte: tausche5 oder so, finde ich das als lehrreicher als weiteres Beispiel, aber das ist wohl geschmackssache. Ich spreche hier nur aus eigener Erfahrung.


----------



## Xeonkryptos (13. Dez 2011)

wer_bin_ich hat gesagt.:


> nun ja ich glaube ich soll einen allgemeinen Mathematischen Beweis liefern, dass die Methode richtig ist.



als mathematischen Beweis hätte ich einfach die Array-Aufrufe zu den Variablen x und y geändert:


```
x = y - x;
y = y - x;
x = y + x;
```

Das ist genau dasselbe in grün.


----------



## wer_bin_ich (13. Dez 2011)

hey genau, das ist ne gute Idee. 
mensch einwandfrei. ihr glaubt garnicht wie ich mich freue, hätte nicht gedacht, dass heute noch zu packen


----------



## Kiri (13. Dez 2011)

Kiri hat gesagt.:


> Alle Methoden funktionieren korrekt auch tausche4!



to Xeonkryptos: Damit meinte ich nicht dich. Ich denke wir sind uns mitlerweile einig - alles ist gut! 

Beim nächsten Mal verbesserst du mich - vielleicht schon morgen. Jetzt ist Feierabend für mich!


----------



## wer_bin_ich (13. Dez 2011)

JAAA jetzt fällt es mir wieder ein, man beweist es per vollständiger Induktion
mal sehen, ob ich das noch packe heute


----------

