Ergebnisse in 2 Zeilen

vince191

Mitglied
Hallo zusammen,

ich komme mal wieder mit einer Aufgabe nicht zurecht und benötige eure Hilfe!
Mein Programm soll eine Eingegebene Zahl mit dem Collatz Regeln berechnen sodass am Ende immer eine 1 als Endergebnis kommt.

Soweit funktioniert das Program ganz gut und er berechnet alles richtig.
Mein Problem ist, das Programm soll auch mitzählen wie oft die Schleife durchlaufen wurde und das als ergebnis ausgeben.

So wie ich den Code geschrieben habe bekomme ich dann alles zusammen ausgegeben.

Bitte geben Sie eine Zahl ein:
22
->11Die Folgelänge ist:1
->34Die Folgelänge ist:2
->17Die Folgelänge ist:3
->52Die Folgelänge ist:4
->26Die Folgelänge ist:5
->13Die Folgelänge ist:6
->40Die Folgelänge ist:7
->20Die Folgelänge ist:8
->10Die Folgelänge ist:9
->5Die Folgelänge ist:10
->16Die Folgelänge ist:11
->8Die Folgelänge ist:12
->4Die Folgelänge ist:13
->2Die Folgelänge ist:14
->1Die Folgelänge ist:15


ich würde es aber gerne so haben:
Bitte geben Sie eine Zahl ein
22
->11 ->34 ->17 ->52 ->26 ->13 ->40 ->20 ->10 ->5 ->16 ->8 ->4 ->2 ->1
Die Folgelänge ist: 15


Code:
import inout.*;

public class Collatz1
{
   public static void main (String args[])
   {
       int n;
      
       System.out.println("bitte geben Sie eine Zahl ein");
       n = Console.readInt();
       int i = 0;
      
             
       while (n != 1)
       {
           if (n % 2 == 0)
              n = n / 2;
     
           else
            n = 3 * n + 1;
           i++;
                             
           System.out.print( "->" + n);
           System.out.println ("Die Folgelänge ist:" + i );
       }
          
   }
}


Hoffe das mit jemand helfen kann!

Danke 🙂
 
Na dann überleg doch mal was du tatsächlich tust:
Java:
while (n != 1) {
  ...
   System.out.print( "->" + n);
   System.out.println ("Die Folgelänge ist:" + i );
}
In jedem Durchlauf machst du ein println mit "Die Folgelänge...."
Pack das einfach hinter die Schleife und fertig.
 
Hallo nochmal, bin immer noch mit der Aufgabe beschäftigt...
dieses mal muss ich alle Zahlen von 1 bis 40 durchlaufen lassen ohne die Startzahl selbst einzugeben.

mein Code funktioniert dieses mal überhaupt nicht :-(
Java:
import inout.*;

public class Collatz4
{
   public static void main (String args[])
   {
       int i= 1;
       int n = i;
       for ( i = 1; i <= 40; i++)
       {
          while (n != 1)
          {
           if (n % 2 == 0)
              n = n / 2;
     
           else
            n = 3 * n + 1; 
            System.out.print( "->" + n + " ");
          }
          
       }   
    }
}

kann mir jmd noch einen Tipp geben was da falsch ist?
Ist es die deklaration oder liegt es an den Schleifen?

Wenn ich int i = 0 eintrage, stürzt das Programm beim starten ab und ich muss es über den debugger stoppen.

Danke schon mal 🙂
 
Die Deklaration int n = i; sollte innerhalb die Schleife, i wird dort erst durchlaufen.
Versuche Deinen Code Schritt für Schritt durchzugehen.
Benutzt du eine IDE?

Etwa so:

Java:
public class Collatz4 {
    public static void main(String args[]) {
        for (int i = 1; i <= 40; i++) {
            int n = i;
            System.out.print("( " + n + " ) ");
            while (n != 1) {
                if (n % 2 == 0)
                    n = n / 2;
                else
                    n = 3 * n + 1;
                System.out.print("-> " + n + " ");
            }
            System.out.println();
        }
    }
}
 
Zuletzt bearbeitet:

Neue Themen


Zurück
Oben