Zum Inhalt springen

Brauche hilfe bei bluej


puma1993

Empfohlene Beiträge

Hallo leute!

Ich brauche ein kleines bisschen hilfe bei einer bluej-Aufgabe für die Schule.

Aufgabe:

/**Erstelle eine Welt - Klasse, die von blauen Kreisen mit Durchmesser 10 Punkte umgeben wird. Die Welt soll eine Breite von 60 Kreisen und eine Höhe 40 Kreisen haben.

was mein problem ist: ich will eine wand bauen, also eine reihe aus punkten, aber irgendwie zeigt er dann immer nur einen punkt an. Ich weis einfach nicht was falsch ist.

hier ist der quelltext:

import eps.einfacheGrafik.Ellipse;

public class Snake {

private Ellipse kreis;

/*---------------Konstruktor---*/

public Snake() {

WandErzeugen1();

WandAnzeigen1();

}

/*---------------Methoden------*/

public void WandErzeugen1(){

for(int i=1;i<=40; i++)

{ kreis = new Ellipse();

kreis.groesseSetzen(10,10);

kreis.positionSetzen(i*10,0);

kreis.farbeSetzen("blau");}}

public void WandAnzeigen1()

{ for(int i=0;i<=40; i++)

{kreis.anzeigen();}}

}

----------------------------------

ich weis das es falsch ist, vor allem das in den klammern, aber unser lehrer sagt uns immer erst danach wie mach es machen hätte sollen . wäre sehr nett wenn ihr das verbessern könntet.

mfg puma1993

Link zu diesem Kommentar
Auf anderen Seiten teilen

Benutze doch die Code-Tags wenn du soviel Quellcode postest.

Ich kenne jetzt BlueJ nicht wirklich aber ich versuche es trotzdem mal:


private Ellipse kreis;


public void WandErzeugen1(){

	for(int i=1;i<=40; i++){

		kreis = new Ellipse();

		kreis.groesseSetzen(10,10);

		kreis.positionSetzen(i*10,0);

		kreis.farbeSetzen("blau");

	}

}


public void WandAnzeigen1(){

	for(int i=0;i<=40; i++){

		kreis.anzeigen();

	}

}
Du hast eine einzige Variable kreis, stell dir das am besten als eine Adresse vor (Fachbegriff ist hier "Referenz"). In der Methode WandErzeugen1 erstellst du dann mit "kreis = new Ellipse()" eine neue Ellipse und schreibst die Adresse dieser neuen Ellipse auf in dem du sie in der Variable speicherst. Beim nächsten Durchlauf erzeugst du wieder eine Ellipse und speicherst die Adresse in der Variable. Das Problem dabei ist, das die alte Adresse dazu weggeschmissen werden muss. Das heißt also in der Variable steht nur noch die neue Adresse und die alte ist "verloren". Wenn du nun WandAnzeigen1 auf rufst steht in der Variable nur die Adresse der letzten erzeugen Ellipse also wird auch nur die letzte angezeigt. Um dein Problem zu lösen sehe ich zwei Möglichkeiten. 1. Methode WandAnzeigen1 löschen und den Aufruf "kreis.anzeigen()" mit in die WandErzeugen1() Methode auf nehmen.

private Ellipse kreis;

public void WandErzeugen1(){

	for(int i=1;i<=40; i++){

		kreis = new Ellipse();

		kreis.groesseSetzen(10,10);

		kreis.positionSetzen(i*10,0);

		kreis.farbeSetzen("blau");

		kreis.anzeigen();

	}

}
2. Verwenden eines Arrays zum Speichern der Adressen.

private int anzahlKreise = 40;

private Ellipse[] kreise = new Ellipse[anzahlKreise];


public void WandErzeugen1(){

	Ellipse kreis;

	for(int i=0;i<kreise.length; i++){

		kreis = new Ellipse();

		kreis.groesseSetzen(10,10);

		kreis.positionSetzen(i*10,0);

		kreis.farbeSetzen("blau");

		kreise[i] = kreis;

	}

}


public void WandAnzeigen1(){

	for(int i=0;i<kreise.length; i++){

		kreise[i].anzeigen();

	}

}

In dem Beispiel wird ein Array, also eine Liste, von Ellipsen verwenden "Ellipse[] kreise = new Ellipse[anzahlKreise];". die Variable anzahlKreise gibt an, wieviele Kreise die Liste maximal auf nehmen kann. In WandErzeugen1() wird pro Schleifendurchlauf eine neue Ellipse erzeugt und die Adresse an einer neuen Stelle im Array abgelegt. In WandAnzeigen1() wird das Array durchlaufen um jede Ellipse anzuzeigen.

Beachte, dass ein Array immer mit 0 beginnt. ALso sind die Stellen bei einem Array mit maximal 40 Stellen von kreise[0] bis kreise[39] durchnummeriert.

PS. Ich habe den Code nicht getestet, d.h. er könnte Fehler enthalten.

Link zu diesem Kommentar
Auf anderen Seiten teilen

danke für die antwort, aber ich habs mitlerweile selber gelöst. ich find meins kürzer, also nehm ich das her.

public welterzeugen(){

WandZeichnen1();

WandZeichnen2();

Wand3..

Wand4..}

public void WandZeichnen1(){

for(int i=0;i<=60; i++)

{ kreis = new Ellipse();

kreis.groesseSetzen(10,10);

kreis.positionSetzen(i*10,0);

kreis.farbeSetzen("blau");

kreis.anzeigen();}}

public void WandZeichnen2(){

...}

trotzdem danke

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...