Denkanstoß für Umlaufzahl dringend benötigt!

moccajoghurt

Bekanntes Mitglied
Hi, bearbeite im Moment eine Aufgabe meines Java-Kurses, die da lautet:

Aufgabe 14:
Zu einer gegebenen natürlichen Zahl z mit n-Ziffern ist ihre sogenannte „Umlaufzahl“ u folgendermaßen definiert:

Die erste Ziffer von z ist auch die erste Ziffer von u.

Die n+1-te Ziffer von u ergibt sich folgendermaßen: Laufe in der Zahl z von der n-ten Ziffer aus gesehen so viele Ziffern nach rechts (gegebenenfalls wieder vorne anfangen!) wie der Wert der n-ten Ziffer angibt. Die erreichte Ziffer in z ist die n+1-te Ziffer von u.

Sobald eine Ziffer in z zum zweiten Mal erreicht wird, ist der Algorithmus beendet.
Beispiel: (z = 6354)
6 3 5 4 u: 6
6 3 5 4 u: 65
6 3 5 4 u: 654
6 3 5 4 u: 6544
Noch ein Beispiel: (z = 1213013)
1 2 1 3 0 1 3 u: 1
1 2 1 3 0 1 3 u: 12
1 2 1 3 0 1 3 u: 123
1 2 1 3 0 1 3 u: 1233
1 2 1 3 0 1 3 u: 12331
1 2 1 3 0 1 3 u: 123313
Aufgabe: Schreiben Sie ein Java-Programm, das eine natürliche Zahl z einliest, die zugehörige Umlaufzahl berechnet und ausgibt.


Die einzigen bisher erlernten Anwesiungen sind for, do, while, if, break, continue und Funktionen und Prozeduren. Daher kann ich den Programm-Ablauf nur damit planen.

Meine bisherige Idee ist es jeder Ziffer der Zahl zu numerieren, wofür ich auch schon eine funktion habe. Leider fehlt mir sonst ein Ansatz.

Gruß
 

VfL_Freak

Top Contributor
Moin,

poste einfach mal den Code, den Du bislang hast und stelle dann konkrete Fragen dazu !!

Ich denke nicht, dass hier irgendwer mal einfach so Deine Aufgaben löst ... und Du würdest dabei ja auch nichts lernen :D

Gruß
Klaus
 

nrg

Top Contributor
trenne das Programm erstmal in Eingabe, Funktionalität und Ausgabe.

Ich erklär es jetzt erstmal prozedural, weil dich oop bestimmt eher verwirren würde.

Zuerst würde ich mal eine Zahl einlesen. Dazu nimmst du einfach einen
Code:
BufferedReader
, instanziiert mit einen
Code:
InputStreamReader
. Jetzt hast du folglich erstmal einen String. Das ist auch gut so, weil du diesen besser iterieren kannst als einen integer (
Code:
charAt(x)
ist einfach leichter, als mathematische Funktionen). Wie gerade schon angedeutet, musst du jetzt ganz einfach durch diesen String iterieren. Dazu nimmst du einfach eine for-Schleife. Die erste Ziffer ist ja klar (könntest auch bereits vor der for-Schleife zur Ausgabe (
Code:
StringBuilder
nehmen) hinzufügen). Danach nimmst du einfach immer den Zähler addierst den Wert, den
Code:
Integer.parseInt(String.valueOf(deinString.charAt(deinZähler)))
derzeit liefert und prüfst ab, ob das Ergebnis kleiner als deine komplette Stringlänge (vor der for-Schleife einlesen!) ist. Wenn ja, subtrahierst du die länge und fügst
Code:
charAt(ergebnis)
zu deinem StringBuilder hinzu.
Danach noch ein
Code:
System.out.println(deinSB.toString());
und du bist fertig :)

Der
Code:
StringBuilder
ist nicht zwingend erfoderlich aber nachdem Strings unveränderlich sind, würdest du mit
Code:
String += andererString
immer wieder neue String Objekte erzeugen. Nachdem das imho der Kompiler optimiert ist es eigentlich egal aber gerade in einem Java-Kurs zusammen mit eben genanntem Argument, kommt das bestimmt ganz gut ;)

edit: das "Drumherum" kommt danach. z.b. Anwenderfehler vorbeugen (abprüfen, ob die Eingabe wirklich eine Zahl ist) oder ein Shell-GUI ("Wollen Sie noch eine Zahl umwandeln? (y/n)")

edit2: also entweder hab ich jetzt einen denkfehler drin, oder deine beispiele sind falsch... wie kann bei 1213013 am vierten index (bei "0") 1 rauskommen? x+0 ist x -> u = 1333031 (6354 wäre für mir 6644).
 
Zuletzt bearbeitet:

Kekzii

Mitglied
Noch ein Beispiel: (z = 1213013)
1 2 1 3 0 1 3 u: 1
1 2 1 3 0 1 3 u: 12
1 2 1 3 0 1 3 u: 123
1 2 1 3 0 1 3 u: 1233
1 2 1 3 0 1 3 u: 12331
1 2 1 3 0 1 3 u: 123313

versteh zwar noch nicht ganz was NRG will aber ich schreibe mal ne Erklärung hinter ;)

1 2 1 3 0 1 3 u: 1 // es startet wie angegeben an erster stelle Also U = 1
1 2 1 3 0 1 3 u: 12 // wir gehen einen Schritt nach rechts und fügen hinzu Also U = 12
1 2 1 3 0 1 3 u: 123 // wir gehen zwei Schritte nach rechts und fügen hinzu Also U = 123
1 2 1 3 0 1 3 u: 1233 // wir gehen drei Schritte nach rechts und fügen hinzu Also U = 1233
1 2 1 3 0 1 3 u: 12331 // wir gehen drei Schritte nach rechts und fügen hinzu Also U = 12331
1 2 1 3 0 1 3 u: 123313 // Jetzt noch den letzten Schritt nach rechts und schon haben wir U = 123313

da nach doppeltem Vorkommen(Auslesen!) einer Ziffer das Programm beendet werden soll ist hier Schluss :)

Ich habe das Programm soweit fertig nur hört er nicht auf :) wie siehts bei euch aus :p

EDIT : Also habe ich eine Endlosschleife :D naja nicht ganz da nach 200durchlaufen ArrayIndexOutOfBoundsException entsteht =)
 

nrg

Top Contributor
achso. habe es etwas falsch gelesen: "Die n+1-te Ziffer von u ergibt sich folgendermaßen: Laufe in der Zahl z von der n+1-ten Ziffer aus gesehen so viele Ziffern nach rechts (gegebenenfalls wieder vorne anfangen!) wie der Wert der n+1-ten Ziffer angibt. Die erreichte Ziffer in z ist die n+1-te Ziffer von u". Naja dann ists klar richtig. Algo ist allerdings der Gleiche. von daher egal :)
 

nrg

Top Contributor
ok um ehrlich zu sein, hab ich die Aufgabe ziehmlich unterschätzt. dachte man nimmt den Wert der "n-ten Zahl" von der Eingabe. Nachdem das grad nicht sooo gut geklappt hat mit "Code in Worte fassen" hier mal ein Beispiel:

Java:
	public String getUmlaufzahl() {
		StringBuilder sb = new StringBuilder();
		sb.append( input.charAt( 0 ) );
		int offset = 0, i = 0, length = input.length();
		boolean[] isReached = new boolean[length];
		while ( !isReached[offset] ) {
			isReached[offset] = true;
			offset = Integer.parseInt( String.valueOf( sb.charAt( i++ ) ) ) + offset;
			if ( offset >= length )
				offset -= length;
			sb.append( input.charAt( offset ) );
		}
		return sb.toString();
	}

edit: input ist ein Attribut der Klasse und wurde bei meinem Beispiel im Konstruktor mit der Eingabe instanziiert
 
Zuletzt bearbeitet:

Kekzii

Mitglied
oh da is mein Prog schon wesentlich komplizierter :D
ich glaub ich muss lernen logischer zu denken :)

Java:
 offset = Integer.parseInt( String.valueOf( sb.charAt( i++ ) ) ) + offset;
heisst das "offset ist ein integer-wert vom String sb an der stelle i + offset" ?

und wenn ja wieso wird packst du das komplette "wort" in den SB und er ersetzt ihn dann statt einfach die variable input zu verwenden?? ???:L
 

nrg

Top Contributor
oh da is mein Prog schon wesentlich komplizierter :D
ich glaub ich muss lernen logischer zu denken :)

Java:
 offset = Integer.parseInt( String.valueOf( sb.charAt( i++ ) ) ) + offset;
heisst das "offset ist ein integer-wert vom String sb an der stelle i + offset" ?
ja (also nicht wert(Stelle i + offset), sondert (wert Stelle i) + offset) :autsch:


und wenn ja wieso wird packst du das komplette "wort" in den SB und er ersetzt ihn dann statt einfach die variable input zu verwenden?? ???:L

Der StringBuilder ist nicht zwingend erfoderlich aber nachdem Strings unveränderlich sind, würdest du mit String += andererString immer wieder neue String Objekte erzeugen. Nachdem das imho der Kompiler optimiert ist es eigentlich egal...
hallte ich einfach für "guten Stil" das explizit zu tun

edit: ausserdem sollte sich ja input nicht verändern. den brauchst du ja noch
 
Zuletzt bearbeitet:

Kekzii

Mitglied
Und ist eindeutig einfacher als meine variante also werde ich mal weiter üben :) mit meinem hüpfenden button der iwann einfach aufhört zu hüpfen :D
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Denkanstoß - Hash ID für URL Java Basics - Anfänger-Themen 7
M Erste Schritte Anfänger braucht Denkanstoß für Schulprojekt Java Basics - Anfänger-Themen 21
B Denkanstoß benötigt: Emails an bestimmte Emailadresse schicken Java Basics - Anfänger-Themen 6
W Erste Schritte Rechnen mit Schleifen? Denkanstoß gesucht Java Basics - Anfänger-Themen 15
I Brauche Denkanstoß: Weitergabe von Kontaktinfos aus verschiedenen Kontaktformularen von Webseiten Java Basics - Anfänger-Themen 2
J vergleich von arrays (benötige Hilfe/Denkanstoß) Java Basics - Anfänger-Themen 16
M BildLauf - ArrayLists - Denkanstoß Java Basics - Anfänger-Themen 2
N Denkanstoß Zeilenumbruch Java Basics - Anfänger-Themen 9
K Arrays zusammen addieren - brauche Denkanstoß:) Java Basics - Anfänger-Themen 4
J Denkanstoß - Array von Objekten mit Ints Java Basics - Anfänger-Themen 20
R Brauche Denkanstoß Java Basics - Anfänger-Themen 31
A Denkanstoß: Drehen eines Bildes (Matrix) Java Basics - Anfänger-Themen 5
M Code aus IntelliJ in "Textform" für Word-Paper? Java Basics - Anfänger-Themen 10
G Icon für App Java Basics - Anfänger-Themen 1
Kerstininer Vererbung Hilfe beim lernen von Objektorientierung für eine Klausur Java Basics - Anfänger-Themen 10
Sniper1000 Java 391 für Windows Java Basics - Anfänger-Themen 37
P Wieso kann ich als Index für einen Array einen Char angeben? Java Basics - Anfänger-Themen 3
benny1993 Java Programm erstellen für ein Fußball-Turnier Java Basics - Anfänger-Themen 3
V Durchschnittliche Volatility in Prozent für 4 Stunden berechnen Java Basics - Anfänger-Themen 14
P Welches SDK für das erstellen einer ausführbaren Datei? Java Basics - Anfänger-Themen 4
C negamax-Algorithmus für Tic-Tac-Toe spielt manchmal falsch Java Basics - Anfänger-Themen 10
D Apache HTTPClient für alle Fälle Java Basics - Anfänger-Themen 41
J Layout Manager, welcher ist der Richtige für mein Program? Java Basics - Anfänger-Themen 1
J Fehlermeldung unverständlich für Jakarta Java Basics - Anfänger-Themen 17
M Minimax-Algorithmus für Vier gewinnt Java Basics - Anfänger-Themen 11
M GUI für Vier-Gewinnt. Java Basics - Anfänger-Themen 4
I JPA Query für mehrere Klassen Java Basics - Anfänger-Themen 3
D Quellcode für cmd funktioniert nicht Java Basics - Anfänger-Themen 9
R Operatoren Rechenoperation in Java verwenden für Calculator Java Basics - Anfänger-Themen 2
R Operatoren Rechenoperation verwenden für Taschenrechner. Java Basics - Anfänger-Themen 32
Ostkreuz Counter für Booleanwerte Java Basics - Anfänger-Themen 8
B Regex Ausdrücke für Monate Java Basics - Anfänger-Themen 7
I BlueJ Queue Frage für Klausur Java Basics - Anfänger-Themen 2
K loop pausieren für eine bestimmte Anzahl? Java Basics - Anfänger-Themen 1
Jxhnny.lpz Randomisier für Buttons Java Basics - Anfänger-Themen 13
W Intuitive interface für Komponenten Java Basics - Anfänger-Themen 4
M "Class<T> clazz" im Constructor - auch für int möglich? Java Basics - Anfänger-Themen 7
B Schrankensystem mit Farberkennung für Flashgame funktioniert nicht wie geplant Java Basics - Anfänger-Themen 4
I Code für Bezahlsystem (auch bei Offline Aktivität) Java Basics - Anfänger-Themen 7
U jUnit 5 Test für eine addMethode Java Basics - Anfänger-Themen 18
M monte carlo Algorithmus für 4 gewinnt Java Basics - Anfänger-Themen 12
frager2345 Java Singleton Muster -> Methode für Konstruktor mit Parametern Java Basics - Anfänger-Themen 3
izoards Sortier Algorithmus für Bounding Box Elememte Links nach Rechts und von Oben nach Unten Java Basics - Anfänger-Themen 33
M generate Methode für Streams Java Basics - Anfänger-Themen 6
I Datenmodell für "Tags" Java Basics - Anfänger-Themen 6
Lion.King for-Kontrollstruktur für Pyramide Java Basics - Anfänger-Themen 8
B Mit Countdown Midnestdauer für Teilaufgabenerledigung erzwingen Java Basics - Anfänger-Themen 8
J File length als Prüfwert für Download Java Basics - Anfänger-Themen 5
K Spieleidee gesucht für Informatikprojekt - JAVA (BlueJ)? Java Basics - Anfänger-Themen 15
P Zähler Variable für mehrere Objekte Java Basics - Anfänger-Themen 6
javamanoman Java für Online Banking Java Basics - Anfänger-Themen 12
NadimArazi Wie kann ich eine collision detection für die Paddles in meinem Pong Programm hinzufügen? Java Basics - Anfänger-Themen 4
JordenJost Java ist auch eine Insel für Anfänger Java Basics - Anfänger-Themen 2
P9cman Tipps für Rekursive Aufgaben mit Strings oder allgemein Java Basics - Anfänger-Themen 2
F Suche nach betreuender Person für eine Jahresarbeit der 12. Klasse. Java Basics - Anfänger-Themen 6
I SQL / JPA Query für StartDate und EndDate Java Basics - Anfänger-Themen 1
T getMethode für ein Array Java Basics - Anfänger-Themen 2
Fats Waller Farben mixen für den Hintergrund ? Java Basics - Anfänger-Themen 1
H Suche jemanden für kleine Uni-Abgabe/ mit Vergütung Java Basics - Anfänger-Themen 1
K Für was braucht man die left und right shift operatoren? Was bringen die, also welchen Zweck haben die? Java Basics - Anfänger-Themen 15
N Api nur für Textdatein (.txt) Java Basics - Anfänger-Themen 2
bluetrix Programmieren eines Bots für Zahlen-Brettspiel Java Basics - Anfänger-Themen 9
M Wie kann eine Methode für ein vorhandenes "Array von char" einen Index-Wert zurückliefern? Java Basics - Anfänger-Themen 3
R Ist Java das Richtige für mich? Java Basics - Anfänger-Themen 4
E Mittelquadratmethode für Hexadezimalzahlen Java Basics - Anfänger-Themen 1
P Einfacher regulärer Ausdruck (RegEx) für E-Mail-Adressen Java Basics - Anfänger-Themen 2
Kiki01 Wie würde eine geeignete Schleife aussehen, die die relative Häufigkeit für jeden Charakter in einem Text bestimmt? Java Basics - Anfänger-Themen 3
N Fehler im Code (Aufgabe für Anfänger) Java Basics - Anfänger-Themen 11
O Wie erstelle ich eine Instanz in einer Klasse für die ich die Instanz will? Java Basics - Anfänger-Themen 4
S BubbleSort für ArrayLists Java Basics - Anfänger-Themen 3
T Übungsbuch für Anfänger Java Basics - Anfänger-Themen 3
L Konzept für Quiz Java Basics - Anfänger-Themen 33
D Methoden Plathhalter für Integer in einer Methode Java Basics - Anfänger-Themen 19
B Datentyp für Einzelnes Objekt oder Liste Java Basics - Anfänger-Themen 9
D Welche GUI Library für eine Client Server Chat App Java Basics - Anfänger-Themen 14
T Algorithmus für Index mit min-Wert Java Basics - Anfänger-Themen 2
Aqtox Hallo ich muss für die Schule ein Wuerfell Duell erstellen jedoch habe ich ein fehler Java Basics - Anfänger-Themen 4
L loop für Namen Java Basics - Anfänger-Themen 11
kxrdelis Konstruktor für ein Rechtwinkliges Dreieck Java Basics - Anfänger-Themen 10
S Fehler bei Code mit SubStrings für mich nicht auffindbar. Java Basics - Anfänger-Themen 4
nevel Programm für die Summer der Zahlen 1- 1ß Java Basics - Anfänger-Themen 12
I Entity erstellen, die für API gedacht ist Java Basics - Anfänger-Themen 33
C Archiv für eigene Klassen Java Basics - Anfänger-Themen 9
A Junit Test für MysqlDataSource JDBC Java Basics - Anfänger-Themen 3
Animal-Mother BMI Rechner erstellen für W/M Java Basics - Anfänger-Themen 7
E Kleines Java-Projekt für Anfänger Java Basics - Anfänger-Themen 10
A Java die richtige Programmiersprache für mein Projekt? Java Basics - Anfänger-Themen 1
I DecimalFormat in Zahlenformat für Währung, habe 7,99, bekomme aber 7 Java Basics - Anfänger-Themen 4
L Methode für Zweidimensionale Arrays Java Basics - Anfänger-Themen 4
Kanaska Datentyp für Zahlenbereiche Java Basics - Anfänger-Themen 7
T Startbildschirm für ein Spiel erstellen Java Basics - Anfänger-Themen 0
U BestPractise für Deployment unter Windows gesucht Java Basics - Anfänger-Themen 12
lilrack UML Diagramm für Parkplatzverwaltung Java Basics - Anfänger-Themen 8
W Mehrfach das gleiche Attribut für ein Objekt erzeugen (mit verschiedenen Werten) Java Basics - Anfänger-Themen 2
B Generische Typen für dynamisches Formular Java Basics - Anfänger-Themen 3
C Was ist nötig für ein Java-Programm auf Server für Website Java Basics - Anfänger-Themen 18
T Vererbung Verschiedene Attribute für vererbte Klassen Java Basics - Anfänger-Themen 4
T Start-Activity für Java Maven Web-Anwendung festlegen Java Basics - Anfänger-Themen 2
T Alternative für switch case Java Basics - Anfänger-Themen 1
P Ressourcen für JSON & API Informationen? Java Basics - Anfänger-Themen 1

Ähnliche Java Themen

Neue Themen


Oben