Lösungsvorschlag 4.1 - Aufgabe 4: Unterschied zwischen den Versionen
Aus ComeniusWiki
(Die Seite wurde neu angelegt: „<syntaxhighlight lang="java"> public class Collatz{ public void collatz(int m){ int n=m; int counter=0; while(n!=1){if(n%2==0){n=n/2;counter++;}else{n=3*n+1;c…“) |
|||
(Eine dazwischenliegende Version von einem Benutzer wird nicht angezeigt) | |||
Zeile 3: | Zeile 3: | ||
public void collatz(int m){ | public void collatz(int m){ | ||
+ | //Übertrag auf Variable n um den Anfangswert zu bewahren | ||
int n=m; | int n=m; | ||
+ | //counter speichert die Anzahl der Schritte ab | ||
int counter=0; | int counter=0; | ||
+ | //die while-Schleife läuft solange bis der Endwert 1 erreicht ist | ||
while(n!=1){if(n%2==0){n=n/2;counter++;}else{n=3*n+1;counter++;}}; | while(n!=1){if(n%2==0){n=n/2;counter++;}else{n=3*n+1;counter++;}}; | ||
{System.out.println("Die Reihe mit der Anfangszahl "+m+" endet nach "+counter+" Schritten bei 1.");} | {System.out.println("Die Reihe mit der Anfangszahl "+m+" endet nach "+counter+" Schritten bei 1.");} | ||
} | } | ||
+ | //Die Erweiterung erfordert einen rekursiven Aufruf der Methode collatz(), | ||
+ | //so dass diese zuerst als Methode mit Rückgabewert erstellt werden muss | ||
public int collatz2(int m){ | public int collatz2(int m){ | ||
int n=m; | int n=m; | ||
Zeile 18: | Zeile 23: | ||
public void collatzMax(int m){ | public void collatzMax(int m){ | ||
int n=m; | int n=m; | ||
+ | //saveM speichert den jeweils aktuellen Wert der Zahl mit der höchsten Schrittzahl ab | ||
int saveM=n; | int saveM=n; | ||
int counter=0; | int counter=0; | ||
+ | //max speichert die höchste Anzahl von Schritten ab | ||
int max=0; | int max=0; | ||
Aktuelle Version vom 6. April 2014, 18:49 Uhr
public class Collatz{ public void collatz(int m){ //Übertrag auf Variable n um den Anfangswert zu bewahren int n=m; //counter speichert die Anzahl der Schritte ab int counter=0; //die while-Schleife läuft solange bis der Endwert 1 erreicht ist while(n!=1){if(n%2==0){n=n/2;counter++;}else{n=3*n+1;counter++;}}; {System.out.println("Die Reihe mit der Anfangszahl "+m+" endet nach "+counter+" Schritten bei 1.");} } //Die Erweiterung erfordert einen rekursiven Aufruf der Methode collatz(), //so dass diese zuerst als Methode mit Rückgabewert erstellt werden muss public int collatz2(int m){ int n=m; int counter=0; while(n!=1){if(n%2==0){n=n/2;counter++;}else{n=3*n+1;counter++;}}; return counter; } public void collatzMax(int m){ int n=m; //saveM speichert den jeweils aktuellen Wert der Zahl mit der höchsten Schrittzahl ab int saveM=n; int counter=0; //max speichert die höchste Anzahl von Schritten ab int max=0; for(int i=2; i<=m;i++){ counter=collatz2(i); if(counter>max){max=counter;saveM=i;}; } System.out.println("Die Anfangszahl "+saveM+" ergibt die längste Reihe mit "+max+" Schritten."); } }