Veröffentlicht 29. August 201113 j Hallo Leute, undzwar habe ich als Aufgabe ein Haus und eine Sonne mit Java BlueJ zu programmieren. Diese Sonne soll einen Sonnenuntergang durchlaufen können. Leider funktioniert das bei mir nicht. Ich habe aber auch noch nie mit Java programmiert das ist mein aller erster versuch. Ich hab meine while Schleife (sofern das überhaupt eine ist...) rot markiert. public class Zeichnung { private Quadrat wand; private Quadrat fenster; private Dreieck dach; private Kreis sonne; /** * Erzeuge ein Exemplar der Klasse Zeichnung */ public Zeichnung() { // nichts zu tun hier, alle Exemplarvariablen werden automatisch // mit null initialisiert. } /** * Zeichne die Zeichnung. */ public void zeichne() { wand = new Quadrat(); wand.vertikalBewegen(80); wand.groesseAendern(100); wand.sichtbarMachen(); fenster = new Quadrat(); fenster.farbeAendern("schwarz"); fenster.horizontalBewegen(20); fenster.vertikalBewegen(100); fenster.sichtbarMachen(); dach = new Dreieck(); dach.groesseAendern(50, 140); dach.horizontalBewegen(60); dach.vertikalBewegen(70); dach.sichtbarMachen(); sonne = new Kreis(); sonne.farbeAendern("gelb"); sonne.horizontalBewegen(180); sonne.vertikalBewegen(-10); sonne.groesseAendern(60); sonne.sichtbarMachen(); [COLOR="red"]while (zeichne) { sonne.langsamHorizentalBewegen(5); sonne.langsamVertikalBewegen(5); } [/COLOR] /** * Ändere die Darstellung in schwarz-weiß. */ public void inSchwarzWeissAendern() { if(wand != null) // nur wenn schon gezeichnet wurde ... { wand.farbeAendern("schwarz"); fenster.farbeAendern("weiss"); dach.farbeAendern("schwarz"); sonne.farbeAendern("schwarz"); } } /** * Ändere die Darstellung in Farbe. */ public void inFarbeAendern() { if(wand != null) // nur wenn schon gezeichnet wurde ... { wand.farbeAendern("rot"); fenster.farbeAendern("schwarz"); dach.farbeAendern("gruen"); sonne.farbeAendern("gelb"); } } } Bearbeitet 29. August 201113 j von flashpixx code tags
29. August 201113 j benutze bitte Code Tags. was ist zeichne? Das sieht sehr nach einer Endlosschleife aus.
29. August 201113 j tut mir leid ich merk es mir für das nächste mal mit den Code Tags, ich muss mich hier ersteinmal in das Forum einarbeiten. ich habe gedacht ich kann dort eintragen was man will deswegen zeichne...dann ist das wohl falsch.... Heißt also in die Klammer kommt eine Abbruchbedingung rein oder habe ich das falsch verstanden? und ist die while schleife überhaupt richtig? Ich glaube hier fehlt auch eine Abbruchbedingung oder?
29. August 201113 j Die Schleife läuft solange, wie der Ausdruck true ist. Und wenn zeichne eine boolsche Variable ist, die immer true ist (wird ja auch in der Schleife nicht verändert), dann ist das eine Endlosschleife. Ich denke eine for-Schleife wäre da eher angebracht.
29. August 201113 j Genau ;-) eine While schleife führt den Code zwischen den {} solange aus, bis der in den () angegebe Ausdruck 'false' wird. Die Bedingung muss also in der Schleife manipuliert werden (oder es gibt etwas von außen, was die Bedingung manipuliert).
29. August 201113 j dies funktioniert leider auch nicht...ich glaube ich habe da ein grundsätzliches Problem...arbeie jetzt leider das erste mal mit java/BlueJ for (int i=1; i<=200; i++) {sonne.langsamHorizontalBewegen = sonne.langsamHorizontalBewegen + i; sonne.langsamVertikalBewegen = sonne.langsamVertikalBewegen + i; }
29. August 201113 j Was heißt funktioniert nicht? Sieht eigentlich richtig aus, was auch immer sonne ist.
29. August 201113 j ganz oben habe ich ja den kompletten Quelltext gepostet, das sonne steht für die Sonne die sich bewegen soll deswegen diese for schleife. jedoch wenn ich es ausführen will kommt die meldung "cannot find symbol - variable langsamHorizontalBewegen public class Zeichnung { private Quadrat wand; private Quadrat fenster; private Dreieck dach; private Kreis sonne; /** * Erzeuge ein Exemplar der Klasse Zeichnung */ public Zeichnung() { // nichts zu tun hier, alle Exemplarvariablen werden automatisch // mit null initialisiert. } /** * Zeichne die Zeichnung. */ public void zeichne() { wand = new Quadrat(); wand.vertikalBewegen(80); wand.groesseAendern(100); wand.sichtbarMachen(); fenster = new Quadrat(); fenster.farbeAendern("schwarz"); fenster.horizontalBewegen(20); fenster.vertikalBewegen(100); fenster.sichtbarMachen(); dach = new Dreieck(); dach.groesseAendern(50, 140); dach.horizontalBewegen(60); dach.vertikalBewegen(70); dach.sichtbarMachen(); sonne = new Kreis(); sonne.farbeAendern("gelb"); sonne.horizontalBewegen(180); sonne.vertikalBewegen(-10); sonne.groesseAendern(60); sonne.sichtbarMachen(); for (int i=1; i<=200; i++) {sonne.langsamHorizontalBewegen = sonne.langsamHorizontalBewegen + i; sonne.langsamVertikalBewegen = sonne.langsamVertikalBewegen + i; } } /** * Ändere die Darstellung in schwarz-weiß. */ public void inSchwarzWeissAendern() { if(wand != null) // nur wenn schon gezeichnet wurde ... { wand.farbeAendern("schwarz"); fenster.farbeAendern("weiss"); dach.farbeAendern("schwarz"); sonne.farbeAendern("schwarz"); } } /** * Ändere die Darstellung in Farbe. */ public void inFarbeAendern() { if(wand != null) // nur wenn schon gezeichnet wurde ... { wand.farbeAendern("rot"); fenster.farbeAendern("schwarz"); dach.farbeAendern("gruen"); sonne.farbeAendern("gelb"); } } }
29. August 201113 j Und was ist Kreis für eine Klasse? Ich bezweifle, dass die eine "langsamHorizontalBewegen"-Property hat. Wenn du den kreis bewegen willst, sollte es eine Position Property geben.
29. August 201113 j kann mir das vlt mal jemand diesen kleinen Part mit der for-schleife oder while schleife programmieren? dann versteh ich das vielleicht....wäre echt nett von euch....
29. August 201113 j Ich hab keine Ahnung was Kreis für eine Klasse sein soll. Woher hast du denn diese Klassen? Hast du die selbst gemacht? Eigene Steuerelemente? Aber wahrscheinlich wird Kreis eine Position Property haben. Damit bestimmst du, wo sich der Kreis befindet. Die Ecke oben links hat die koordinate 0,0 Die unten Rechts hat das Maximum(also die Fenstergröße) Das heißt wenn du x inkrementierst gehts nach rechts, bei y nach unten.
30. August 201113 j Überprüf mal, ob es in der Klasse die Variable langsamHorizontalBewegen gibt oder ob sie manchmal anders heißt. Das ist ein klassischer Anfängerfehler. In dem Fall bekommst du an der Stelle den entsprechenden Kompilierfehler. Wenn dein Programm abbricht oder gar nicht startet, poste bitte immer die ganze Fehlermeldung mit. Mit "funktioniert nicht" kommen wir nicht sehr weit. Gruß
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.