Zahlenfolge in Java

Ich habe eine Aufgabe, die lautet:

Mit diesen Bildungsgesetzen soll eine Zahlenfolge konstruiert werden: (n ∈ N)
• Beginne mit einer natürlichen Zahl n > 0
• ist n gleich 1, beende das Programm
• Ist n gerade, berechne n/2
• Ist n ungerade, berechne 3 ∗ n + 1
• Wiederhole die Vorgehensweise mit der berechneten Zahl Beispiel: n = 13 ergibt die folgende Sequenz aus 10 Termen: 13, 40, 20, 10, 5, 16, 8, 4, 2, 1.
Beispiel: n = 13 ergibt die folgende Sequenz aus 10 Termen: 13, 40, 20, 10, 5, 16, 8, 4, 2, 1. Implementieren Sie den Algorithmus iterativ in Java. Das Programm soll am Ende sowohl die Zahlen der Folge ausgeben, als auch die Anzahl der Elemente. Der Nutzer soll die Zahl n am Anfang des Programmes eingeben können. Dazu ein Beispiel für die Ausgabe in der Konsole:

Code:
Geben Sie eine Zahl n ein: 13
Element der Reihe: 13, 40, 20, 10, 5, 16, 8, 4, 2, 1
Anzahl der Elemente: 10


Ich habe das Programm schon geschrieben, aber es funktioniert nicht genau wie diese Aufgabe.
Kann jemand mir helfen?

Code:
import java.util.Scanner;
public class Zahlenfolgen {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        int n;
        Scanner sc = new Scanner(System.in);
       
        System.out.println("Geben Sie eine Zahl n ein: ");
       
        n = sc.nextInt();
       
   
        if (n == 1)
            {
            System.out.println("Das Programm wird beenden");
        }
       
        sc.close();
       
        do {
            if (n % 2 == 0)
            {
                n /= 2;
           
            System.out.println("Element der Reihe: " + n);
       
            }
        }
            while (n > 0);
           
        }
        }
 

httpdigest

Top Contributor
Dir fehlt einfach nur noch der else Fall der if Anweisung, in welchem du 3*n+1 berechnest.
Ansonsten ist dieser Algorithmus auch als Collatz- oder Ulam-Collatz-Problem bzw. -Folge bekannt.
 

FourOhFour

Aktives Mitglied
Die Auflistung sagt doch genau, was du machen sollst.

So lange n != 1 -> mach die nächsten Punkte. Was verwendet man um etwas x-mal laufen zu lassen, bis etwas eintritt, man aber nicht weiß, wie viele Schritte man dafür braucht?

Wenn n gerade ist n/2 rechnen -> einfache Prüfung und falls diese wahr ist, die Berechnung durchführen.

Selbes mit einer ungeraden Zahl, nur andere Rechnung.
 
Die Auflistung sagt doch genau, was du machen sollst.

So lange n != 1 -> mach die nächsten Punkte. Was verwendet man um etwas x-mal laufen zu lassen, bis etwas eintritt, man aber nicht weiß, wie viele Schritte man dafür braucht?

Wenn n gerade ist n/2 rechnen -> einfache Prüfung und falls diese wahr ist, die Berechnung durchführen.

Selbes mit einer ungeraden Zahl, nur andere Rechnung.

Ja ich weiß. Aber kannst du mir zeigen, welche code kann ich benutze?
 

FourOhFour

Aktives Mitglied
Ich zitiere einfach mal etwas von einem älteren Beitrag von mir:

Welche Schleife man verwendet habe ich mir immer gemerkt mit:
-> for - wenn du weißt, wie viele Schritte du brauchst
-> while - wenn du nicht weißt, wie viele Schritte du brauchst
-> do-while - wenn es zumindest 1x geschehen muss

Hilft dir das an der Stelle weiter?
Du prüfst in deinem Code nur an einer Stelle, ob "n==1" - und zwar am Anfang. Jedoch soll die Zahl ja so oft verändert werden, bis diese 1 erreicht - bedeutet du musst sie auch x-mal prüfen. Zudem prüfst du nicht, ob die Zahl ungerade ist - bzw. hast die erforderliche Rechnung gar nicht implementiert. Und warum soll das ganze geprüft werden, so lange n > 0? Es soll doch geprüft werden, so lange "n nicht 1" ist.
 
Ich zitiere einfach mal etwas von einem älteren Beitrag von mir:



Hilft dir das an der Stelle weiter?
Du prüfst in deinem Code nur an einer Stelle, ob "n==1" - und zwar am Anfang. Jedoch soll die Zahl ja so oft verändert werden, bis diese 1 erreicht - bedeutet du musst sie auch x-mal prüfen. Zudem prüfst du nicht, ob die Zahl ungerade ist - bzw. hast die erforderliche Rechnung gar nicht implementiert. Und warum soll das ganze geprüft werden, so lange n > 0? Es soll doch geprüft werden, so lange "n nicht 1" ist.

Ich habe nicht ganz verstanden. Das heißt, anstatt „while n>0“ soll ich „while n != 1“ prüfen.
Und danach prüfe ich, ob die Zahl ungerade oder nicht. Wenn ungerade, dann n= 3*n+1. Aber wie kann ich richtig eine Reihe wie Beispiel herausfinden?
 

FourOhFour

Aktives Mitglied
Naja, so weit sind wir:

Java:
while(n!=1) {
    wenn(n gerade){
        n = n/2;
    }
    ansonsten{
        n = 3 * n + 1;
    }
}

Ich denke der Code gibt schon relativ viel weg. Allerdings musst du nun auch noch die Elemente, sowie die Anzahl der Elemente ausgeben. Daran kannst du ja noch ein wenig tüfteln, damit deine Ausgabe der von der Aufgabe identisch ist.
 

Blender3D

Top Contributor
Ich formuliere die Aufgabenstellung für dich etwas um.
Ein wichtiges Prinzip, um Spagetti-Code zu vermeiden heißt Teile und Herrsche. Das bedeutet: Wenn Du ein großes Problem lösen willst, zerlege es in kleine Teilprobleme und löse zuerst diese. Mit den Lösungen ist es dann einfach das Hauptproblem zu lösen. ;)
Teilprobleme Deiner Aufgabe sind:
1) Integer Wert von der Konsole einlesen
Java:
public static int inputNumber(Scanner scanner, String text)
Die Funktion soll sicherstellen, dass nur Werte größer gleich Eins eingeben werden.
Gibt der Benutzer eine Zahl kleiner 1 oder einen String ein, soll mit einem Hinweis auf den Fehler die Eingabe wiederholt werden bis eine brauchbare Eingabe erfolgt ist.
2) Aus einem Integer Wert größer oder gleich eins den nächsten Folgewert laut Vorschrift berechnen.
Mit diesen Bildungsgesetzen soll eine Zahlenfolge konstruiert werden: (n ∈ N)
• Beginne mit einer natürlichen Zahl n > 0
• ist n gleich 1, beende das Programm
• Ist n gerade, berechne n/2
• Ist n ungerade, berechne 3 ∗ n + 1
Java:
public static int nextNumber(int num)
Schreibe diese Funktionen.
Eine mögliche Lösung des Hauptproblems sieht dann so aus.
Java:
    int cnt = 1;
        Scanner scanner = new Scanner(System.in);
        int n = inputNumber(scanner, "Geben Sie eine Zahl ein: ");
        while (n > 1) {
            System.out.print(n + ", ");
            cnt++;
            n = nextNumber(n);
        }
        System.out.println(n);
        System.out.println("Anzahl der Elemente: " + cnt);
        scanner.close();

:)
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
L Zahlenfolge Java Basics - Anfänger-Themen 13
B Zahlenfolge von Queue in Stack Java Basics - Anfänger-Themen 29
K Rekursion einer Zahlenfolge (Ab- und Aufzählung) Java Basics - Anfänger-Themen 6
D Konsolenausgabe Zahlenfolge Rekursion Java Basics - Anfänger-Themen 3
K Zahlenfolge ArrayList Java Basics - Anfänger-Themen 3
T Min und Max einer Zahlenfolge bestimmen Java Basics - Anfänger-Themen 7
B Algorithmus zum entmischen einer Zahlenfolge Java Basics - Anfänger-Themen 15
C Ungerade Zahlenfolge ausgeben Java Basics - Anfänger-Themen 11
F zufällige Zahlenfolge Java Basics - Anfänger-Themen 8
E Zahlenfolge des einen Arrays in zweiten enthalten Java Basics - Anfänger-Themen 7
R integer zahlenfolge speichern, ausgeben Java Basics - Anfänger-Themen 1
B zahlenfolge einlesen und in array umwandeln Java Basics - Anfänger-Themen 7
S Zahlenfolge ausgeben Java Basics - Anfänger-Themen 5
B Zahlenfolge addieren Java Basics - Anfänger-Themen 5
E Zahlenfolge ausgeben Java Basics - Anfänger-Themen 4
D Zahlenfolge ausgeben Java Basics - Anfänger-Themen 19
X Zahlenfolge in Int-Array einlesen? Java Basics - Anfänger-Themen 7
M If/Else mit Zahlenfolge Java Basics - Anfänger-Themen 13
Antoras Zahlenfolge mit Schleifen ausgeben Java Basics - Anfänger-Themen 10
M Zahlenfolge verwenden Java Basics - Anfänger-Themen 8
kulturfenster Zahlenfolge einlesen Java Basics - Anfänger-Themen 8
V Zahlenfolge in Frame ausgeben Java Basics - Anfänger-Themen 9
H .java Dateien in Eclipse einbinden und ausführen Java Basics - Anfänger-Themen 1
onlyxlia Schlüsselworte Was meint man mit "einen Typ" in Java erstellen? Java Basics - Anfänger-Themen 2
O Java Kara geschweifte Klammern Java Basics - Anfänger-Themen 2
richis-fragen Mausrad logitech kann links und rechts klick wie in java abragen. Java Basics - Anfänger-Themen 15
XWing Java Klssenproblem Java Basics - Anfänger-Themen 4
R Umgebungsvariable java -cp gibt immer Java-Hilfe... Java Basics - Anfänger-Themen 3
farbenlos Csv Datei in Java einlesen Java Basics - Anfänger-Themen 18
F TableModelListener: java.lang.ArrayIndexOutOfBoundsException: 132 Java Basics - Anfänger-Themen 3
G Java 8 - Support-Ende Java Basics - Anfänger-Themen 7
T Java Weihnachtsbaum + Rahmen Java Basics - Anfänger-Themen 1
N Will mit Java anfangen Java Basics - Anfänger-Themen 13
Ü Java Array - Buchstaben als Zahlen ausgeben Java Basics - Anfänger-Themen 22
M Java Iterator Verständnisfrage Java Basics - Anfänger-Themen 6
M Java Mail Programm Java Basics - Anfänger-Themen 4
Sniper1000 Java 391 für Windows Java Basics - Anfänger-Themen 37
J Java long- in int-Variable umwandeln Java Basics - Anfänger-Themen 6
JaZuDemNo Java im Studium Java Basics - Anfänger-Themen 7
E Java Programm zur anzeige, ob Winter- oder Sommerzeit herrscht Java Basics - Anfänger-Themen 62
I QR code in Java selber generieren Java Basics - Anfänger-Themen 5
V Java-Ausnahmebehandlung: Behandlung geprüfter Ausnahmen Java Basics - Anfänger-Themen 1
krgewb Java Streams Java Basics - Anfänger-Themen 10
A Überwältigt von der komplexen Java Welt Java Basics - Anfänger-Themen 29
O Mehrfachvererbung auf Spezifikations- und Implementierungsebene in Java. Interfaces Java Basics - Anfänger-Themen 19
John_Sace Homogene Realisierung von Generics in Java ? Java Basics - Anfänger-Themen 19
P Meldung aus Java-Klasse in Thread an aufrufende Klasse Java Basics - Anfänger-Themen 1
R mit Java API arbeiten Java Basics - Anfänger-Themen 9
P JDK installieren Probleme bei der Java-Installation Java Basics - Anfänger-Themen 8
S Java: Wie sortiere ich eine ArrayList benutzerdefinierter Objekte nach einem bestimmten Attribut? Java Basics - Anfänger-Themen 2
Timo12345 JNLP File mit Java öffnen Java Basics - Anfänger-Themen 2
S Video Editierung mit Java.._ Java Basics - Anfänger-Themen 2
F Einstelungen in Java - CursorBlinkRate Java Basics - Anfänger-Themen 10
A PHP $_POST["name"] in Java Java Basics - Anfänger-Themen 3
vivansai21 Is there a oneliner to create a SortedSet filled with one or multiple elements in Java? Java Basics - Anfänger-Themen 9
Athro-Hiro Weißes Bild in Java erstellen Java Basics - Anfänger-Themen 3
Arjunreddy Can someone please tell me how to use a debugger in BlueJ(a Java environment) Java Basics - Anfänger-Themen 1
M Java assoziationen (UML) Java Basics - Anfänger-Themen 8
H Excel-Tabellen mit Java erstellen Java Basics - Anfänger-Themen 4
Simon16 Java ArrayListe von einer Klasse sortieren Java Basics - Anfänger-Themen 2
P Wie kann ich in meinem Java Programm etwas dauerhaft speichern? Java Basics - Anfänger-Themen 5
H Nutzt Eclipse alle CPU-Threads beim Ausführen von Java-Programmen? Java Basics - Anfänger-Themen 4
xXGrowGuruXx Java einstieg, leichte sache 0 verstanden Java Basics - Anfänger-Themen 7
A java.sql.SQLException: Data type mismatch. Java Basics - Anfänger-Themen 1
H Java-Programm zur Ausgabe von Zuständen Java Basics - Anfänger-Themen 80
N Java Spiel Figur auf dem Hintergrundbild bewegen. Java Basics - Anfänger-Themen 11
G Kann Java-Programm nicht als jar aufrufen, auch als EXE nicht Java Basics - Anfänger-Themen 19
N Java Taschenrechner hat Jemand vlt einen Tipp dafür wie ich jetzt die buttons verbinden kann und das Ergebnis auf dem textfield anzeigen lassen kann Java Basics - Anfänger-Themen 13
A Lerngruppe Java Java Basics - Anfänger-Themen 2
G Help me in the Java Program Java Basics - Anfänger-Themen 2
L Java- Vererbung Java Basics - Anfänger-Themen 4
LimDul Suche Java Stream Tutorial Java Basics - Anfänger-Themen 2
_so_far_away_ Ich möchte Java lernen Java Basics - Anfänger-Themen 11
benny1993 Java Programm erstellen für ein Fußball-Turnier Java Basics - Anfänger-Themen 3
M Datentypen While-Schleife eine Java Methode erstellen Java Basics - Anfänger-Themen 3
V Bild per Java Script austauschen Java Basics - Anfänger-Themen 7
MoxMorris this Keyword in Java Java Basics - Anfänger-Themen 14
D Wie kann man in Java nach Arrays auf Duplikate prüfen Java Basics - Anfänger-Themen 12
wolei JAVA Zeitdifferenz feststellen. Java Basics - Anfänger-Themen 4
DiyarcanZeren Rekursion in Java Java Basics - Anfänger-Themen 5
wolei Java generic interface in a generic class Java Basics - Anfänger-Themen 6
monsterherz Ablauf der Erstellung eines Java Programmes Java Basics - Anfänger-Themen 17
monsterherz Circle.java:5: error: <identifier> expected Java Basics - Anfänger-Themen 2
julian-fr Wie kann ich am besten Java lernen? Java Basics - Anfänger-Themen 17
A Java-Properties und -RessourceBundles Java Basics - Anfänger-Themen 5
lrnz22 Java-Basics-Aufgabe Java Basics - Anfänger-Themen 8
R Java kann nicht installiert werden Java Basics - Anfänger-Themen 8
marcelnedza Finde meinen Fehler in einer Methode nicht, Java Karol Java Basics - Anfänger-Themen 15
G In ein java Dokument Ton einbinden Java Basics - Anfänger-Themen 1
C was heisst es wenn java ']' erwartet ? Java Basics - Anfänger-Themen 2
KeinJavaFreak Erste Schritte Programm "Java(TM) Platform SE binary " nicht vorhanden Java Basics - Anfänger-Themen 1
KeinJavaFreak Erste Schritte Java "Executable Jar File" nicht vorhanden Java Basics - Anfänger-Themen 1
melisax Java 2D-Array Tabelle Java Basics - Anfänger-Themen 4
melisax Java Array Wert an bestimmtem Index angeben Java Basics - Anfänger-Themen 14
J Java Testklasse Java Basics - Anfänger-Themen 5
P Java Selenium . Parameterized.Parameters erzeugt eine Fehlermeldung Java Basics - Anfänger-Themen 14
W Java-Code mit Array Java Basics - Anfänger-Themen 14
W Java-Code Java Basics - Anfänger-Themen 2
P BeforeEach AfterEach werden nicht ausgeführt. Java / Selenium Java Basics - Anfänger-Themen 4
A Wie führe ich eine Batch-Datei von meiner Java-Anwendung aus? Java Basics - Anfänger-Themen 18

Ähnliche Java Themen

Neue Themen


Oben