Geschachtelte Strukturen

FiselM

Mitglied
int eingabe, laenge, hoehe, wert ;

//System.out.println("Geben Sie Bitte eine Zahl ein \n" +
// "(Bitte nur eine ganze Zahl eingeben)");
//eingabe = Console.console_in_int();
laenge = 0;
eingabe = 0;
hoehe = 0;
for ( eingabe = 1; eingabe <= 40; eingabe = eingabe + 1)
//hoehe = eingabe;

{
while (eingabe > 1)
{
if ( ( eingabe % 2 ) == 0 )
eingabe = (eingabe/2);
else
eingabe = ((3*eingabe) + 1);
System.out.print(eingabe);

if (eingabe > hoehe)
hoehe = eingabe;
else
hoehe = hoehe;

if (eingabe > 1)
System.out.print("->");
laenge = laenge + 1;


}
}
System.out.println();
System.out.println("Anzahl der Schleifen " + laenge);
System.out.println("Höchster Wert in der Schleife " + hoehe);
}

Programm soll das Collatzproblem lösen mit den Eingabewerten 1 bis 40
(versuche ich automatisiert darszustellen mit der "for"


Beim Ausführen des Programmes endet er in einer Endlosschleife Warum ?

Bin Java Anfänger und ich komme nicht auf den Fehler?
 
Hallo,

grob gesagt liegt es an der Variable eingabe. Du benutzt sie überall. Du benutzt sie für die komplette Bedingung der for-Schleife und in der while-Schleife rechnest du mit ihr. Da eingabe nach Ende der while-Schleife immer nur 1 sein kann, kann eingabe auch in der for-Schleife immer nur auf 2 gezählt werden, somit erreicht eingabe nie 40 und die Schleife kann nicht abgebrochen werden.

MFG

zEriX
 
laenge = 0;
hoehe = 0;
eingabe = 1;
for ( wert = 1; wert <= 40; wert = wert + 1)
//hoehe = eingabe;

{

while (eingabe > 1)
{
if ( ( eingabe % 2 ) == 0 )
eingabe = (eingabe/2);
else
eingabe = ((3*eingabe) + 1);
System.out.print(eingabe);
//End if hier wird geprüft ob der Wert eingabe Gerade oder Ungerade ist


if (eingabe > hoehe)
hoehe = eingabe;
else
hoehe = hoehe;
// Ende hier wird festgehalten wer die größte Zahl im Algorythmus ist

if (eingabe > 1)
System.out.print("->");
laenge = laenge + 1;
//EnD if Schleife wenn eingabewert größer 1 ist endet hier

}

System.out.println();
System.out.println("Anzahl der Schleifen " + laenge);
System.out.println("Höchster Wert in der Schleife " + hoehe);

}
eingabe = eingabe + 1;
}

das mit den verschiedenen Werten habe ich auch verstanden und er läuft jetzt auch 40 mal durch Jedoch habe ich noch schwierigkeiten den eingabeparameter je durchlauf um 1 zu erhöhen?
 
Hallo!
Ich hab mir mal dein Programm angeschaut. Ein paar Verbesserungsvorschläge:
1. Variablen sollten immer in einem möglichst kleinen Geltungsbereich definiert werden.
2. Nachdem du über wert eh von 1 bis 40 zählst kannst du die Erhöhung in der for Schleife von diesem Wert abhängig machen.

Das dürfte eigentlich Alles sein was ich geändert habe:

Java:
for (int wert = 1; wert <= 40; wert++)
{
	int eingabe = wert;
	int laenge = 0;
	int hoehe = 0;
	
	while (eingabe > 1)
	{
		if (eingabe % 2 == 0 )
			eingabe = eingabe / 2;
			
		else
			eingabe = 3 * eingabe + 1;
			
		System.out.print(eingabe);


		if (eingabe > hoehe)
			hoehe = eingabe;

		if (eingabe > 1)
			System.out.print("->");
				
		laenge++;
	}
			
	System.out.println();
	System.out.println("Anzahl der Schleifen " + laenge);
	System.out.println("Höchster Wert in der Schleife " + hoehe);
}

mfg flo
 
Zurück