Kann mir jemand das Beispiel kurz erklären so ungefähr:/

marcooooo

Mitglied
[CODE lang="java" title="code"]private static void drawPatternRecursive(int x, int y, int l, boolean c) {
if (l >= 16) {


drawPatternRecursive(x + l / 4, y + l / 4, l / 2, !c);
drawPatternRecursive(x - l / 4, y - l / 4, l / 2, !c);
drawPatternRecursive(x - l / 4, y + l / 4, l / 2, !c);
drawPatternRecursive(x + l / 4, y - l / 4, l / 2, !c);

if (c) {
StdDraw.setPenColor(StdDraw.ORANGE);
//c = true;
} else {
StdDraw.setPenColor(StdDraw.BLUE);
//c = false;
}

StdDraw.filledRectangle(x, y, l * 0.05 / 2, l / 2);
StdDraw.filledRectangle(x, y, l / 2, l * 0.05 / 2);
}
}[/CODE]
 
K

kneitzel

Gast
Als erstes ist die Frage, was die Variablen bedeuten: x, y, l und c - das ist ja im Text erläutert.

- Dann ist die Frage, was der Code macht. Wenn Du das nicht verstehst, dann schau es Dir an. Kommentier die 4 rekursiven Aufrufe aus. Was macht dann die Methode?
- Dann nimm dir den ersten Rekursiven Aufruf und ruf diesen außerhalb auch noch auf. Du hast also einen Aufruf mit gewissen Werten und nun rufst Du den auf, wobei die Parameter verändert sind - und zwar so wie in dem ersten rekursiven Aufruf. -> Was macht er dann?
- Diesen Aufruf kommentierst Du aus und dafür nimmst Du den ersten rekursiven Aufruf rein. -> Was macht der Code nun?
- das schaust Du dann auch noch bei den anderen beiden Aufrufen, entweder jeweils mit auskommentieren der anderen rekursiven Aufrufe.
- Evtl. ist es hilfreich, wenn Du dann den Aufruf aus dem zweiten Punkt der Auflistung noch einmal dazu nimmst um zu betrachten, wie es sich ändert ...
- Nun kannst Du die die auskommentierten Codes nach und nach hinzu nehmen und das zusätzlich hinzugefügte weg und voila: Das ganze Bild entsteht und du hast hoffentlich verstanden, was diese rekursive Methode macht.
 

mihe7

Top Contributor
Lass gedanklich erstmal die Zeilen 5 bis 8 raus, d. h. lass die Rekursion weg. Dann passiert ja offensichtlich folgendes:

Wenn l < 16 ist, ist das Thema erledigt. Ansonsten wird geprüft, ob c true ist. Ist dies der Fall, wird der Stift auf orange gesetzt, sonst auf blau. Naja und dann werden zwei Rechtecke mit dem Mittelpunkt (x,y) gezeichnet: einmal vertikal (Zeile 18) und einmal horizontal (Zeile 19). Die Höhe bzw. Breite ist dabei l/2, die Breite bzw. Höhe 5 % davon.

Das kann man mal durchspielen für den Aufruf aus der Aufgabenstellung: x und y sind 0. Die Länge ist 512 und das c steht auf true. Also werden zwei orangene Rechtecke der Länge 256 über Kreuz mit Mittelpunkt (0,0) gezeichnet.

Jetzt bauen wir mal Zeile 5 ein. Dann wird - noch bevor die Stiffarbe einegestellt wird und die 256er-Rechtecke gezeichnet werden - die Methode erneut aufgerufen. Aber natürlich mit anderen Parametern: Der Mittelpunkt wird horizontal nach rechts und vertikal nach unten um 1/4 der angegebenen Länge verschoben. Dort sollen Rechtecke mit der halben bisherigen Länge gezeichnet werden. Der Farbparameter wird negiert, so dass sich bei jedem wiederkehrenden Aufruf die Farbe ändert.

Das kann man wieder durchspielen:
Ebene 1: Parameter: 0, 0, 512, true
Test in Zeile 2 liefert true, also wird mit Zeile 5 fortgefahren. Dort erfolgt nun ein neuer Aufruf:
Ebene 2: Parameter: 128, 128, 256, false
Test in Zeile 2 liefert true, also wird mit Zeile 5 fortgefahren. Dort erfolgt nun ein neuer Aufruf:
Ebene 3: Parameter: 160, 160, 128, true
Test in Zeile 2 liefert true, also wird mit Zeile 5 fortgefahren. Dort erfolgt nun ein neuer Aufruf:
Ebene 4: Parameter: 168, 168, 64, false
Test in Zeile 2 liefert true, also wird mit Zeile 5 fortgefahren. Dort erfolgt nun ein neuer Aufruf:
Ebene 5: Parameter: 184, 184, 32, true
Test in Zeile 2 liefert true, also wird mit Zeile 5 fortgefahren. Dort erfolgt nun ein neuer Aufruf:
Ebene 6: Parameter: 192, 192, 16, false
Test in Zeile 2 liefert true, also wird mit Zeile 5 fortgefahren. Dort erfolgt nun ein neuer Aufruf:
Ebene 7: Parameter: 200, 200, 8, true
Test in Zeile 2 liefert false, damit ist der Methodenaufruf aus Ebene 6 beendet.
Ebene 6: Code wird ab Zeile 10 weiter ausgeführt (die anderen Zeilen haben wir ja ausgeblendet)
Die Parameter auf Ebene 6 waren: 192, 192, 16, false. Also werden jetzt blaue Rechtecke mit Mittelpunkt 192,192 der Länge 8 gezeichnet. Damit ist der Methodenaufruf aus Ebene 5 beendet.
Ebene 5: Code wird ab Zeile 10 weiter ausgeführt (die anderen Zeilen haben wir ja ausgeblendet)
Die Parameter auf Ebene 5 waren: 184, 184, 32, true Also werden jetzt orange Rechtecke mit Mittelpunkt 184,184 der Länge 16 gezeichnet. Damit ist der Methodenaufruf aus Ebene 4 beendet.
usw.

EDIT: Wenn Du jetzt Zeile 6 einbaust, funktioniert das nach dem gleichen Prinzip, d. h. nach einer Rückkehr des Methodenaufrufs aus Zeile 5 erfolgt sofort der nächste Aufruf in Zeile 6 und erst, wenn dieser zurückkehrt, geht es auf der gleichen Ebene mit der nächsten Zeile weiter.
 

marcooooo

Mitglied
[CODE lang="java" title="iterative MEthode"]private static void drawPatternIterative(int width) {
int length = width/64;
// boolean c = false;
boolean c = true;

for ( int x=0; x<6; x++){
if(c){
StdDraw.setPenColor(StdDraw.BLUE);
c=false;
}else {
StdDraw.setPenColor(StdDraw.ORANGE);
c=true;
}
for(int y = 1; y< width/length; y++){
for(int z=1; z<width/length;z++){
StdDraw.filledRectangle(-256+length*z,-256+length*y,length,length*0.05);
StdDraw.filledRectangle(-256+length*z,-256+length*y,length*0.05, length);
}
}
length*=2;
}
}[/CODE]

kann mir jemand noch das kurz erklären, vielen dank für das davor, das ist die iterative methode warum steht da 64 am anfang
 
K

kneitzel

Gast
Also ich bezweifle, dass diese iterative Methode das Gleiche macht wie die Rekursive Methode.

Wenn dem so wäre, dann müsste es ja etwas geben wie ein Aufruf nur mit der breite, welche dann die Rekursive Methode aufruft mit entsprechenden Dingen ...

Der Unterschied wird auch schnell deutlich:
width wird vorgegeben
length = width/64

Die Schleife läuft von 1 bis width/length = width/(width/64) = 64
==> Es gibt also eine fixe Anzahl an Kreuze, die Gemalt werden.

Bei der Rekursion war dies abhängig vom Parameter l. Wenn der Parameter l < 16 ist, dann wird nichts gemalt und ansonsten n Mal wenn gilt
16*2^(n-1) <= l < 16*2^n
Das kommt, weil ja immer / 2 gerechnet wird. l < 16: 0, 16-31: 1, 32-63: 2, ...

Dadurch ist dies erst einmal ein unterschiedliches Verhalten und ich sehe nicht, dass es hier wirklich um den gleichen Algorithmus geht.

Aber das war jetzt auch nur ein schneller, kurzer Blick - vielleicht irre ich mich ja auch und habe etwas übersehen ...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
F Kann mir jemand bei dem Fehler helfen? Java Basics - Anfänger-Themen 6
U Kann mir jemand helfen? Java Basics - Anfänger-Themen 2
T Kann mir jemand wörtlich erklären, was in dem Code genau passiert? Java Basics - Anfänger-Themen 1
N Ich kriege ganze zeit die Fehlermeldung "Inhalt der Zwischenablage kann nicht in die ausgewählten Elemente eingefügt werden" hat jemand eine Lösung? Java Basics - Anfänger-Themen 6
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
C Kann mir jemand sagen warum public void unzulässig ist? Java Basics - Anfänger-Themen 2
C Kann mir jemand sagen warum ich nicht mal rechnen kann ? Java Basics - Anfänger-Themen 32
C Kann mir jemand helfen was mit diesen Fehlern gemeint ist ? Java Basics - Anfänger-Themen 12
M Kennt jemand die richtige Lösung? Java Basics - Anfänger-Themen 7
F Kann mir jemand kurz dieses Programm erklären? Java Basics - Anfänger-Themen 22
HeiTim Kann mir Jemand helfen ? Java Basics - Anfänger-Themen 11
H Versteht jemand diesen Codewars Error? Java Basics - Anfänger-Themen 8
M BerechneEtwas Weiss jemand woran es liegt Java Basics - Anfänger-Themen 8
M Könnte mir jemand diese Aufgabe erklären? Java Basics - Anfänger-Themen 2
M Kann mir jemand hier die Logik vermitteln? Java Basics - Anfänger-Themen 3
M Kann mir jemand die Logik erklären? Java Basics - Anfänger-Themen 1
M Könnte mir jemand diese Aufgabe erklären? Java Basics - Anfänger-Themen 9
T Ich habe eine Variabel die nicht Methoden übergreifend ist. Kann mir jemand Helfen :) Java Basics - Anfänger-Themen 5
G Weiß jemand wie man dieses Programm schreibt? Java Basics - Anfänger-Themen 84
A Kann mir Jemand erklären wie ich das iteriere? Java Basics - Anfänger-Themen 4
G Fehlersuche-kann mir jemand helfen? Java Basics - Anfänger-Themen 46
T Kann jemand kurz das Programm testen? Java Basics - Anfänger-Themen 13
T Aufgabe Flussdiagramm, kann jemand checken? Java Basics - Anfänger-Themen 8
J Hat jemand einen Lösungsansatz für diese Aufgabe? Java Basics - Anfänger-Themen 1
Y kann jemand die Terme mit Zahlen schreiben ?? Java Basics - Anfänger-Themen 4
R Kann mir hier jemand weiterhelfen? Java Basics - Anfänger-Themen 1
B Java -Turtle Grafik - kennt sich jemand damit aus? Java Basics - Anfänger-Themen 1
A Kann mir jemand dieses Programm erklären? Java Basics - Anfänger-Themen 1
B Kann mir jemand diese Bedingung erklären Java Basics - Anfänger-Themen 5
B Kann mir jemand erklären, warum hier dreimal was ausgegeben wird und nicht nur zweimal? Java Basics - Anfänger-Themen 16
B Könnte jemand über dieses jurze Javaprogramm schauen? Irgendwas funktioniert mit der z-Varible nicht Java Basics - Anfänger-Themen 2
E Input/Output Kann jemand meinen Code durchschauen? Java Basics - Anfänger-Themen 4
T Kann mir jemand sagen, was bei folgender for-Schleife passiert? Java Basics - Anfänger-Themen 1
F Versteht das jemand? -Java Java Basics - Anfänger-Themen 6
J TabelView - Kann mir jemand die Sequenz genau erklären ? Java Basics - Anfänger-Themen 2
K Könnte mir jemand erläutern, was der autor damit meint? Java Basics - Anfänger-Themen 5
J Kann mir bitte mal jemand diese Codes erklären? Java Basics - Anfänger-Themen 19
A Hat jemand einen ratschlag, wie java beim replaceALL eine geschweifte klammer erkennt ? Java Basics - Anfänger-Themen 5
H Java Hamster - kann mir jemand weiterhelfen? Java Basics - Anfänger-Themen 4
V kennt jemand empfehlenswerte online tutorials zur Hibernate ? gerne auch englisch. Java Basics - Anfänger-Themen 4
R Kann jemand diese Java Programmierung machen? Versteh ich leider nicht Java Basics - Anfänger-Themen 17
R weiß jemand warum Java diesen Fehler ausspuckt? "Variable might not hav been initialized" Java Basics - Anfänger-Themen 4
R kann mir jemand erklären was hier gemacht wurde? Java Basics - Anfänger-Themen 10
I kann mir jemand weiterhelfen, wo liegen die Fehler? Java Basics - Anfänger-Themen 3
E Kann mir jemand sagen was hier falsch ist? Java Basics - Anfänger-Themen 6
gonzoradio Hat jemand Erfahrung mit javavideokurs.de Java Basics - Anfänger-Themen 5
D Kann mir vielleicht jemand die reflexive Assoziation erklären? Java Basics - Anfänger-Themen 2
C Hat jemand Ahnung zum GCJ(Gnu Compiler for Java) Java Basics - Anfänger-Themen 7
S Kann mir jemand kurz die Vorteile des Iterators erklaeren..? Java Basics - Anfänger-Themen 8
M Kann mir bitte jemand "java.util.ArrayList" erklären? Java Basics - Anfänger-Themen 5
S Kennt jemand die Default-Cache Zeit beim Java-Plugin? Java Basics - Anfänger-Themen 2
B könnte nochmal jemand über mein Projekt schauen? Java Basics - Anfänger-Themen 4
S unschöne schleifen.jemand ne bessere idee Java Basics - Anfänger-Themen 4
K Kennt jemand ein gutes Tutorial für Wertübergabe? Java Basics - Anfänger-Themen 4
G Kann mir jemand das erklären? Java Basics - Anfänger-Themen 11
S Hat jemand eine Idee warum die JLabels nicht mehr farbig Java Basics - Anfänger-Themen 7
G Hoffe jemand kann mir ein paar Tips geben:binärer Suchbaum Java Basics - Anfänger-Themen 3
G Nutzt Jemand JCalendar? Java Basics - Anfänger-Themen 3
C Kann jemand mir helfen? Java Basics - Anfänger-Themen 15
N Kann mir bitte jemand helfen? Java Basics - Anfänger-Themen 6
M Kann mir jemand erklären, wie "static" funktionier Java Basics - Anfänger-Themen 2
T Beispiel Polymorphie, Tier hund = new Hund(); Java Basics - Anfänger-Themen 3
J Fehlerbehandlung an einem Beispiel Java Basics - Anfänger-Themen 8
U Beispiel Methode size() vom "Collection"-interface... Wie kann man sichtbar machen, was die Methode unter der Haube macht? Java Basics - Anfänger-Themen 8
Blndner Auto Beispiel Java Basics - Anfänger-Themen 4
melisax Beispiel Java umprogrammieren Java Basics - Anfänger-Themen 23
dieter000 Frage zu einem Beispiel... Java Basics - Anfänger-Themen 5
dieter000 Hilfe bei dem Beispiel, wie gehe ich sowas am besten an? Java Basics - Anfänger-Themen 32
marcooooo Frage zu bestimmten Beispiel Java Basics - Anfänger-Themen 31
NeoLexx equals()-Methode Verständnis Frage anhand Code Beispiel Java Basics - Anfänger-Themen 22
C Beispiel-Code mit Pair wird nicht compiliert. Java Basics - Anfänger-Themen 8
B Webhooks verstehen - Beispiel? Java Basics - Anfänger-Themen 25
B Java Vererbung Fragen (zu Code Beispiel) Java Basics - Anfänger-Themen 3
J For-Schleife (Beispiel) Java Basics - Anfänger-Themen 6
G Rekursion Beispiel Java Basics - Anfänger-Themen 3
H OOP, wie gehts richtig? (Beispiel von meinem Prof) Java Basics - Anfänger-Themen 6
J Suche simples Beispiel für die EOFException Java Basics - Anfänger-Themen 1
O Wert in einer URL hinzufügen (in meinem Beispiel Google) Java Basics - Anfänger-Themen 7
F jscience Beispiel Java Basics - Anfänger-Themen 0
D Klassen Gesucht: Einfache Beispiel-Klasse für einen Datentyp Java Basics - Anfänger-Themen 7
B Erste Schritte Way of life ohne import - Habe Beispiel, macht Unfug Java Basics - Anfänger-Themen 21
J Kompilieren von HelloWorld Beispiel schlägt fehl Java Basics - Anfänger-Themen 7
Z Schleifen Beispiel: Fakultät Java Basics - Anfänger-Themen 26
M Frage zum generellen Verständiss von OO an einem Beispiel Java Basics - Anfänger-Themen 4
L GridLayout, Beispiel? Java Basics - Anfänger-Themen 2
M Wozu Upcasting? Am Beispiel List = ArrayList Java Basics - Anfänger-Themen 2
L Beispiel Projekte Java Basics - Anfänger-Themen 3
B Erste Schritte HILFE Brauche ein Beispiel für korrekte Syntax mit Semantikfehlern Java Basics - Anfänger-Themen 6
V Objekte/Klassen erstellen - Erklärung anhand Beispiel Java Basics - Anfänger-Themen 4
J Interface Frage zu Interfces am Beispiel Observer Pattern Java Basics - Anfänger-Themen 8
T Erste Schritte für was steht das "this" in dem Beispiel... Java Basics - Anfänger-Themen 2
B Grundlagen von Methoden an folgendem Beispiel Java Basics - Anfänger-Themen 52
E Polymorphie Beispiel Polymorphie Java Basics - Anfänger-Themen 2
M Threads am Beispiel Parkhaus Java Basics - Anfänger-Themen 10
G OOP Beispiel Objekte zugreifen Java Basics - Anfänger-Themen 3
M Suche Beispiel-Spiel Java Basics - Anfänger-Themen 3
M Ganz einfaches Beispiel, finde den Fehler aber nicht :( Java Basics - Anfänger-Themen 2
A Frage zu Beispiel eines Dekorierers von InputStream Java Basics - Anfänger-Themen 4
M Kann kein Objekt (AudioFile in diesem Beispiel) für ein leeren String erzeugen Java Basics - Anfänger-Themen 3
P wie oop an diesem beispiel verbessern? Java Basics - Anfänger-Themen 31

Ähnliche Java Themen

Neue Themen


Oben