JAVA zahlenfolge rückwärts ausgeben, geht das?

Status
Für weitere Antworten geschlossen.

Forry

Lieutenant
Registriert
Dez. 2011
Beiträge
595
Hallo

ich habe ein Programm geschrieben (als Übung) um eine zahl vom Dezimalsystem ins Binärsystem umzuwandeln. Die Zahlen werden jetzt aber falsch rum ausgegeben (ich denke ihr wisst was ich meine). Gibt es eine möglichkeit das ganze umgekehrt auszugeben?

(Habe dabei an Arrays gedacht, weiß aber nicht wie ich das umsetzen soll)



Hier mein Code:

public static void printDual(int x){


if (x % 2 == 0){
System.out.print(0);
}
else System.out.print(1);

if (x >1)
printDual(x/2);
}


LG
 
Den zweiten IF-Block vor den ersten ... tadaa

Warum das funktioniert kannst du dir ja selbst überlegen.

Kompakt:
Code:
public static void printDual(int x){
  if (x > 1) {
    printDual(x / 2);
  }
  System.out.print(x % 2);
}
 
ultrapeinlich.... danke xDD

hm ok so richtig verstehn wie er das nun aufrollt versteh ich grad net....


Merkt sich JAVA die zahlen die ich bei der Div raushab? So ich das sehe passiert ja bei x = 8 folgendes:


if (x>1) wird aufgerufen mit 8, dann 4, dann 2, dann 1 (da rekursiver aufruf)

danach behandelt er die 2te if bei mir, bzw die Sysout bei Ihnen. ?
 
Zuletzt bearbeitet:
Ja er stackt die Aufrufe und erst beim x = 1 wird auf den print befehl gegangen, danach geht er ein Schritt zurück und gibt die nächste print Anweisung aus.
 
gut zu wissen was Java so alles kann o.O

danke euch 2
 
Naja, Rekursion ist etwas was am schwersten zu verstehen ist.
Im Studium scheitern extrem viele daran.

Stell dir einfach jeden Rekursionsschritt als ein Kästchen auf dem karierten Blatt vor.
Fängst mit der 8 an schreibst dann die 4, 2, 1 in je ein Kästchen darunter.

Die Methode ruft sich ja immer selbst auf mit dem neu berechneten Wert, bis sie auf die Abbruchbedingung stößt - hast du keinen Abbruch, läuft sie endlos bis dich Java mit einem Stack Error begrüßt weil der Speicher zugesaut wurde :D
Der Abbruch ist hier, wenn (X > 1) false liefert, d.h. x nicht > 1 (if-Blöcke liefern immer wahr oder falsch), folglich ruft sie sich ab hier nicht mehr selbst auf da der if-Block übersprungen wird. -> Rekursionsende, jetzt wird weiter verarbeitet.

Vereinfacht gesagt ist alles unter der 8 eine virtuelle "Kopie" (Schritt). Diese "Kopie" merkt sich Java indem es auf den Stack schreibt. Die Kopie mit der 1 ist das letzte auf dem Stack, danach gibt es keine da das Abbruchkriterium gegriffen hat.

So, nun hast du den Bleistift unten an der 1 und musst wieder hoch zur 8 um die Kopien vom Stack zu verarbeiten. Kannst dir also vorstellen das Rekursionen erst in die Tiefe gehen, dann auf dem Rückweg tun was sie tun sollen.
Du bist also nun bei dem Methodenaufruf printDual(x / 2); wo die 1 berechnet wurde. Innerhalb dieser Kopie die zur 1 gehört läuft der Code nun normal weiter nach unten durch. Ist er zu Ende, kommt die vorletzte Kopie dran usw.

1%2 -> Rest 1.
2%2 = 0
4%4 = 0
8%2 = 0

Packst du also das print vor die if, wird sofort ausgegeben da print nun auf dem Weg nach unten liegt.
Da das print bereits überquert wurde, wird es auch nicht mehr hoch gehen - code läuft ja von oben nach unten durch.

Ergo, 0001

Aber eine gute Übung. Später wirst du das alles bei Bäumen brauchen um diese rekursiv zu verarbeiten :)
Wenn du weiter Rekursion üben willst, empfehle ich dir möglichst bald mit Listen anzufangen, dann diese Listen selbst zu programmieren ohne das mitgelieferte Java Zeugs zu nutzen. So fangen die Studiengänge Informatik auch üblicherweise an, Basics, Listen, Rekursion, Bäume, dann Sortierverfahren (selectionsort etc.).

Wer das vor dem Informatik Studium kann, der wird jedes Wochenende Party feiern statt zu büffeln :)
 
Zuletzt bearbeitet:
Also Rekursion zu verstehen find ich nicht so schwer. Es selbt zu schreiben ist etwas kniffliger, was mir hier aber Porbleme macht war einfach nur die Unwissenheit über die Eigenschaften des Stacks (wusste nicht das er die Zahlen so lange speichert...) aber danke nochmal für die Erklärung
 
Nee es gibt da keine Lösung. Wenn selbst schon Google versagt und die Forenregeln nicht einschreiten können, kann man nichts mehr tun.
 
Und das nächste mal bitte selbst durch die Hauarbeiten wühlen.
 
Status
Für weitere Antworten geschlossen.

Ähnliche Themen

Zurück
Oben