Zum Inhalt springen

Brauche hilfe bei bluej


Empfohlene Beiträge

Geschrieben

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

Geschrieben

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.

Geschrieben

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

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

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...