So juten Abend freunde
Ich habe hier eine Aufgabenstellung und komme partout nicht weiter, vllt. kann mir ja jemand von euch weiterhelfen.
Hier ist der Collatz und der Collatz Main Code.
Nun habe ich die Objektvariable Number als final deklariert, und hab Collatz Next wie folgt veraendert.
Nun weiss ich leider nicht weiter wie ich bei "isInLoop" nun auf dieses neue n zugreifen kann, da es mit number ja nichtmehr funktioniert.
Ich hoffe mir kann jemand helfen, vielen Dank schonmal dafuer
Ich habe hier eine Aufgabenstellung und komme partout nicht weiter, vllt. kann mir ja jemand von euch weiterhelfen.
Die Klasse Collatz repräsentiert eine solche Zahlenfolge.
Der Konstruktor legt den Startwert fest,
die Methode getNumber liefert die aktuelle Zahl und next wechselt zur nächsten Zahl.
Schließlich gibt isInLoop Auskunft darüber, ob der (vermutlich einzige)
Zyklus erreicht ist oder noch nicht.
Die Anwendung CollatzMain liest eine Zahl von der
Kommandozeile, initialisiert ein Collatz-Objekt und berechnet damit die Zahlenfolge,
bis der Zyklus erreicht ist.
Modifizieren Sie Collatz zu einer „stark unveränderlichen“ Klasse und passen Sie
das Hauptprogramm an.
Äußerlich funktioniert das neue Programm genauso wie das alte.
Hier ist der Collatz und der Collatz Main Code.
Java:
public class Collatz
{
/** Die aktuelle Zahl der Folge. */
private int number;
/** Ctor zum Start einer neuen Folge.
* @param number Erste Zahl der Folge.
*/
public Collatz(final int number)
{
this.number = number;
}
public int getNumber()
{
return number;
}
/** Wechselt zur nächsten Zahl der Folge.
*/
public void next()
{
if(number % 2 == 0)
number /= 2;
else
number = 3 * number + 1;
}
/** Gibt Auskunft, ob die Folge in einem Zyklus steckt,
* das heißt, ab jetzt nur noch Zahlen liefert, die schon
* früher geliefert wurden.
* @return true = Folge läuft in einer Schleife; false andernfalls.
*/
public boolean isInLoop()
{
return number == 1 || number == 2 || number == 4;
}
}
Java:
public class CollatzMain
{
/** Hauptprogramm.
* @param args Kommandozeilenargumente.
* Erste Zahl der Folge.
* Alle weiteren bis zum Erreichen eines Zyklus werden ausgegeben.
*/
public static void main(final String... args)
{
final Collatz collatz = new Collatz(Integer.parseInt(args[0]));
while(!collatz.isInLoop())
{
collatz.next();
System.out.println(collatz.getNumber());
}
}
}
Nun habe ich die Objektvariable Number als final deklariert, und hab Collatz Next wie folgt veraendert.
Java:
public Collatz next()
{
int n = number;
if(n % 2 == 0)
n /= 2;
else
n = 3 * n + 1;
Collatz result = new Collatz(n);
return result;
}
Nun weiss ich leider nicht weiter wie ich bei "isInLoop" nun auf dieses neue n zugreifen kann, da es mit number ja nichtmehr funktioniert.
Ich hoffe mir kann jemand helfen, vielen Dank schonmal dafuer