Werte bei Rekursion viel höher als erwartet

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hallo alle zusammen,
Ich arbeite an der Ausgabe eines rekursiven Bildes mithilfe von SVG, weil ich an awt/swing erstmal gescheitert bin...
soweit ist mein Code ganz simpel, nur liefert er mir unglaublich abartige Werte aus. Wo liegt der Fehler?
Die Werte für alle double- bzw int-Zahlen sollten sich zwischen -200 und +200 bewegen
Anscheinend aber liegen sie im Bereich von 10^9

Ich bin total verzweifelt und bitte um Hilfe

Code:
import java.awt.Graphics;


public class SVG {
	static int schrittweite = 1;
	public static void rekurs(int xx1, int xx2, int yy1, int yy2, int schritt ) 
	  { 
			 if (schritt<=schrittweite){
				double rechtsobenX, rechtsobenY, linksobenX, linksobenY, vorzeichen, laenge, anstieg;
				//laenge		= Math.sqrt((xx1-xx2)*(xx1-xx2)+(yy1-yy2)*(yy1-yy2));
				//anstieg		= Math.abs(yy1-yy2)/Math.abs(xx1-xx2);
				linksobenY  = yy1 - (xx2-xx1)*0.5;
				linksobenX  = xx1 - (yy2-yy1)*0.5;
				rechtsobenY = 0.75 * yy2 - (xx2-xx1)* 0.5 * 0.75;
				rechtsobenX = 0.75 * xx2 - (yy2-yy1)* 0.5 * 0.75;
				System.out.println("<polygon points=\""+xx1+","+yy1+" "+linksobenX+","+linksobenY+" "+rechtsobenX+","+rechtsobenY+" "+xx1+","+yy2+"\" style=\" fill:#cccccc;stroke:#000000;stroke-width:1\"/>");
				rekurs((int) Math.round(linksobenX),(int) Math.round(rechtsobenX),(int) Math.round(linksobenY),(int) Math.round(rechtsobenY),schritt++);
				rekurs((int) Math.round(rechtsobenX),(int) Math.round(xx2),(int) Math.round(rechtsobenY),(int) Math.round(yy2),schritt++);
			 }
	  }
	public static void main(String[] args) {
		int width=1024;
		int height=768;
		rekurs(10,20,10,20,1);
	    /*rekurs(width/2-21,width/2-20,height/2-20,height/2+20,1);
	    rekurs(width/2+21,width/2+20,height/2-20,height/2+20,1);
	    rekurs(width/2-20,width/2+20,height/2-20,height/2-20,1);
	    rekurs(width/2-20,width/2+20,height/2+20,height/2+20,1);*/

	}

}

vielen Dank schonmal im Voraus, Gruß, Sauerkraut
 

Murray

Top Contributor
Ich weiß ja nicht, was der Code eigentlich machen soll, aber das
Code:
   public static void rekurs(int xx1, int xx2, int yy1, int yy2, int schritt ) {
          if (schritt<=schrittweite){
            /* .. */
            rekurs((int) Math.round(linksobenX),(int) Math.round(rechtsobenX),(int) Math.round(linksobenY),(int) Math.round(rechtsobenY),schritt++);
          }
   }
ist eine Endlosrekursion, die irgendwann zu einem StackOverflowError führt: wenn die Bedingung schritt <= schrittweite erfüllt ist, dann wird sie es auch im nächsten Aufruf noch sein, denn das Konstrukt schritt++ legt ja den unveränderten Wert von Schritt als Argument für den Methodenaufruf auf den Stack und inkrementiert den Wert erst danach - es wird also rekurs mit dem gleichen Wert für schritt nochmal aufgerufen. Und beim nächsten Mal ändert sich wieder nichts und immer so weiter, bis die maximale Rekursionstiefe erreicht ist.
 
G

Gast

Gast
eine Kleinigkeit fehlt in Murrays schöner Erklärung:
statt dessen:
Code:
++schritt
 

Murray

Top Contributor
Gast hat gesagt.:
eine Kleinigkeit fehlt in Murrays schöner Erklärung:
statt dessen:
Code:
++schritt
Das hatte ich absichtlich nicht geschrieben. Denn dann könnte man ja auf die Idee kommen, es so zu schreiben:
Code:
public rekurs( ... int schritt) {
  if ( ...) {
    rekurs( ... ++schritt);
    rekurs( ... ++schritt);
  }
}
Und das ist womöglich nicht das, was mit der Methode bezweckt wird, da der Wert dann ja zweimal erhöht wird.
Vermutlich wäre eher das gemeint:
Code:
public rekurs( ... int schritt) {
  if ( ...) {
    rekurs( ... ++schritt);
    rekurs( ... schritt);
  }
}
Ich persönlich würde ohnehin versuchen zu vermeiden, das Methodenargument im Laufe der Methode zu verändern.
Also lieber so:
Code:
public rekurs( ... [b]final[/b] int schritt) {
  if ( ...) {
    final int naechsterSchritt = schritt+1;
    rekurs( ... naechsterSchritt);
    rekurs( ... naechsterSchritt);
  }
}
Aber das ist sicher Geschmackssache.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
O Werte einer Generic LinkedList zusammenrechenen Allgemeine Java-Themen 14
C In DefaultTableModel nachträglich Werte einfügen Allgemeine Java-Themen 2
rosima26 Unterschiedliche Werte bei return/print Allgemeine Java-Themen 12
berserkerdq2 Kann man in IJVM maximal 3 Werte im Stack haben? Allgemeine Java-Themen 3
OnDemand RegEx /compilebekomme nicht die erwarteten Werte Allgemeine Java-Themen 9
MiMa Werte in liste speichern? Allgemeine Java-Themen 3
Drachenbauer Wie kann ich einer existierenden Enum von außerhalb veränderte Werte zuweisen? Allgemeine Java-Themen 5
Arif Math.cos liefert komische Werte Allgemeine Java-Themen 8
X Größten Werte in meinem Array löschen? Allgemeine Java-Themen 16
D Erste Schritte Im Array Werte tauschen Allgemeine Java-Themen 5
J int Werte in einer anderen Klasse in Arrays speichern Allgemeine Java-Themen 3
B Übernommene Variablen(werte) aus der Main-Klasse ändern? Allgemeine Java-Themen 9
Henrithebegiinerofjava Erste Schritte Werte in Eingabefelder einlesen und wiederholen lassen. Allgemeine Java-Themen 3
I Java: public final Werte: Gute oder schlechte Praxis? Allgemeine Java-Themen 6
S Algorithmus welcher True-Werte in einem Array findet und auswertet. Allgemeine Java-Themen 5
P Static Variable -> unterschiedliche Werte? Allgemeine Java-Themen 1
J Swing UIManager Werte Allgemeine Java-Themen 6
4 Java 2 ArrayListen Werte herauslesen/übernehmen Allgemeine Java-Themen 4
F Enum-werte als Methoden-Parameter übergeben Allgemeine Java-Themen 6
KeVoZ_ int Werte in einen String fassen Allgemeine Java-Themen 4
N Werte aus Hashmap auslesen und übertragen Allgemeine Java-Themen 8
2 mehrere Json Werte Parsen Allgemeine Java-Themen 3
R jTable, nur Werte zwischen 2 Double values ausgeben Allgemeine Java-Themen 3
B Übergebene Werte in Gerätedatei schreiben Allgemeine Java-Themen 2
M Exceltabelle in Java erstellen und Werte einlesen Allgemeine Java-Themen 32
N Werte aus Arrays auslesen funktioniert nicht Allgemeine Java-Themen 5
R Int werte vergleichen und Anzahl Paare ausgeben Allgemeine Java-Themen 4
O Klassen Programm in Klassen unterteilt, werte werden nicht mehr übernommen Allgemeine Java-Themen 3
R kann man irgendwie mit Arrays mit Eingabefenstern und Schleifen Werte abklappern? Allgemeine Java-Themen 2
L Windows CMD werte Parsen. Allgemeine Java-Themen 2
M Werte aus DB in Liste speichern ohne mehrfach speicherung Allgemeine Java-Themen 18
K Methoden Arrays auf true Werte prüfen Allgemeine Java-Themen 4
R Variablen per HSSF geheime Werte von JAVA an EXCEL Allgemeine Java-Themen 2
ARadauer Checksumme über BigDecimal Werte Allgemeine Java-Themen 11
C Datentypen Enum-Werte Bestanteil von anderem Enum Allgemeine Java-Themen 8
Q GregorianCalendar Methode add liefert komische Werte Allgemeine Java-Themen 3
BRoll Image RGB Werte auslesen und vergleichen Allgemeine Java-Themen 8
Madlip Variablen 3 Werte aus ArrayList und weiter ... Allgemeine Java-Themen 4
M Aus Excel Tabelle lesen und Werte in Array speichern Allgemeine Java-Themen 15
A String Array Werte in neues String Array übernehmen Allgemeine Java-Themen 5
S OOP Objekte als Return-Werte: Einen Klon zurückgeben oder Instanz auf das Feld? Allgemeine Java-Themen 10
R Zusammenhängende Werte in 2-dim. Array finden und zählen Allgemeine Java-Themen 3
S Sinnvolles skalieren von Werte-Set? Allgemeine Java-Themen 2
S Keytool: mögliche Werte für Parameter Allgemeine Java-Themen 4
P Werte in Array zählen und Summe der einzelnen Teile ausgeben Allgemeine Java-Themen 10
L Veränderbare Werte zusammenfassen Allgemeine Java-Themen 18
P Variablen Werte der Objektvariablen mit getFields() abfragen Allgemeine Java-Themen 2
O Variablen System.getenv: Sinnlose Werte, Arrays?! Allgemeine Java-Themen 6
J JSONObject Reihenfolge der Werte? Allgemeine Java-Themen 4
T java.uil.Random liefert negative Werte Allgemeine Java-Themen 2
c_sidi90 Werte an bestimmten Position aus PDF in DB sichern Allgemeine Java-Themen 2
C Vergleich von Enums gibt inkorrekte Werte Allgemeine Java-Themen 6
T Array Sortieren (null Werte ans Ende) Allgemeine Java-Themen 2
S Werte aus 2 eindimensionale boolean arrays mithilfe von logischen operatoren berechnen Allgemeine Java-Themen 6
C aus einem String einzelne Hex Werte lesen Allgemeine Java-Themen 7
P JFormattedTextField für durch Semikolon getrennte Integer-Werte gesucht / Regulärer Ausdruck Allgemeine Java-Themen 3
M rxtx OutputStream sendet falsche werte Allgemeine Java-Themen 3
J Hex Werte in Bitmap Raster darstellen Allgemeine Java-Themen 16
E Werte übergabe Allgemeine Java-Themen 2
E Werte in andere Klasse übernehmen Allgemeine Java-Themen 8
S Bytes oder Hex-Werte zu Assembler Code? Allgemeine Java-Themen 6
D Mehrere String-Werte in eine Tabellen-Zelle schreiben Allgemeine Java-Themen 8
P Methoden und Werte Allgemeine Java-Themen 17
M Kugelschnittberechnung liefert falsche Werte Allgemeine Java-Themen 4
N unzählige Werte am besten speichern(?) Allgemeine Java-Themen 2
D Spielerwechsel über boolsche Werte läuft inkorrekt Allgemeine Java-Themen 6
MonsterBit 2 Werte aus 2 Array vergleichen Allgemeine Java-Themen 10
T Apache POI Export EXCEL - [Zahlen-Werte] Allgemeine Java-Themen 1
S Doppelte Werte in Listen,Vectoren etc suchen Allgemeine Java-Themen 2
Airwolf89 Zugriff auf Werte in ArrayList<ArrayList> Allgemeine Java-Themen 4
H Prüfen, ob doppete Werte in int-Array vorhanden sind Allgemeine Java-Themen 16
K Datenhaltungsklasse für wenige Werte? Allgemeine Java-Themen 4
T JProgressbar ändert werte nicht Allgemeine Java-Themen 28
K need help ; Werte aus einer Datei auslesen Allgemeine Java-Themen 4
C Eingegebene Werte werden nicht gezeichnet Allgemeine Java-Themen 2
chik 2 return werte für Greedy-Algorithmus (gelöst) Allgemeine Java-Themen 3
hdi dynamische return-Werte Allgemeine Java-Themen 15
R Double Werte aus byte[] auslesen Allgemeine Java-Themen 5
T Wurfweitenberechnung: X-Werte bei extremen Werten falsch. Allgemeine Java-Themen 15
G Excel Werte / Zellen formatieren Allgemeine Java-Themen 5
P Bedeutung der Process.exitValue() Werte? Allgemeine Java-Themen 3
C String to hex und hex-Werte löschen Allgemeine Java-Themen 2
D Suche sowas wie Map nur für mehrere Werte Allgemeine Java-Themen 13
M Werte im Browser aktualisieren Allgemeine Java-Themen 2
L Werte in externer Datei speichern und wieder auslesen? Allgemeine Java-Themen 8
MQue Werte in eine html- Datei schreiben Allgemeine Java-Themen 17
D werte in excelltabelle schreiben Allgemeine Java-Themen 5
N Werte Von C++ nach Java über den Stream möglich? Allgemeine Java-Themen 8
S JFreeChart LineChart Punkte über NULL Werte hinweg verbinden Allgemeine Java-Themen 5
G Werte zusammenfassen! Allgemeine Java-Themen 3
M BufferedReader.read(char[] cbuf) liefert falsche Werte? Allgemeine Java-Themen 4
W PrintWriter (PrintStream) sendet falsche Werte Allgemeine Java-Themen 18
Y Methode soll 2 Werte zurückliefern Allgemeine Java-Themen 7
F Werte von Member-Variablen erst im Konstruktor setzen? Allgemeine Java-Themen 7
D Werte aus drei Auswahllisten Allgemeine Java-Themen 5
P JSlider nur bestimmte werte geben Allgemeine Java-Themen 2
P JavaCode verschlüsseln / verschlüsselte Werte Allgemeine Java-Themen 3
D JTextfield für double werte Allgemeine Java-Themen 2
D Spezielles Eingabefeld für Numerische Werte in Swing Allgemeine Java-Themen 2
D Werte aus mehreren getMethoden auslesen Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben