Welt mit while-Schleife umzäunen

thoff430

Mitglied
Hallo miteinander!



Ziel ist es, mittels einer while-Schleife die Welt unabhängig von der Größe zu umzäunen. Dafür soll eine Methode placeFences() geschrieben werden, die Gebrauch davon macht, dass man die Welt fragen kann, wie groß sie eigentlich ist.

Wie geht's weiter?

Der Code entspricht dem linken Bild. Rechts ist das Ziel zu sehen.

Java:
public class ChickenWorld  extends World
{

    private static final int MAXWIDTH = 16, MAXHEIGHT = 16, CELLSIZE = 30;
    public int x, y;
    public int width = getWidth();
    
    /**
     * Constructor for objects of class ChickenWorld.
     * 
     */
    public ChickenWorld() {    
        super(MAXWIDTH, MAXHEIGHT, CELLSIZE); 
        populate ();
    }

    public void populate () {
        Barnfield fryde = new Barnfield ();
        Fence fence = new Fence();
        addObject(fence, 0, 0);
        addObject(fryde, 8, 8);
    }
    
    public void placeFences () {
        
    }

}
 
M

Marcinek

Gast
für jedes Feld x,y:
schaue ob x oder y == 0 oder x oder y == max fields
wenn ja, dann mach ein Zaun hin

Gruß,

Martin
 

thoff430

Mitglied
So geht's anscheinend schonmal nicht... ich knobel mal weiter.

Java:
public void placeFences () {
        while ((x==0)||(y==0)||(x==width)||(y==width)){
        Fence fence = new Fence();
            addObject(fence, x, y); 
        }
    }
 
E

emailundlos

Gast
Mit einer Schleife: Bei einer Iteration der Schleife kann z.B. 1 oder 2 Felder gesetzt werden, nicht beliebig oder unterschiedlich viele.

D.h. du müsstest einen Schleife schreiben, die oben macht, eine, die unten macht, und eine, die jeweils zwei Felder in einer Reihe/Zeile macht.

Damit vermeidest du geschachtelte Schleifen. :eek: :eek:
 

thoff430

Mitglied
Um die oberste Zeile vollzubekommen hab ich mir das hier gedacht:

Java:
for (int x = 0; x <= width; x++){
        Fence fence = new Fence();
            addObject(fence, x, 0); 
        }

Was mach ich hier im Wesentlichen falsch? Ich bekomme keinen Zaun hingesetzt.
 

Kevin94

Top Contributor
Hab zwar nicht viel mit Greenfoot gemacht und kenn mich mit dem Initialisierungsprozess nicht aus aber ich würde mal raten, dass [c]public int width = getWidth();[/c] als erstes im Konstruktor ausgeführt wird und dann der [c]super[/c]-Aufruf und damit wäre width 0. Gib einfach mal width aus oder nimm deine Konstante, die müsste den selben Wert haben.
 
M

Marcinek

Gast
Du hast meinen pseudocode falsch implementiert

nicht solange x, y == 0 ist sondern foreach (Field in Array) (für jedes)

Gruß,
Martin
 

thoff430

Mitglied
Du hast meinen pseudocode falsch implementiert

nicht solange x, y == 0 ist sondern foreach (Field in Array) (für jedes)

Gruß,
Martin

Sorry, Arrays kann ich noch nicht anwenden. Im Prinzip muss, laut Aufgabenstellung, das ganze mit einer while-Schleife realisierbar sein.

Ich bin erst gerade am einarbeiten in Java, allgemein ins Programmieren. Erstmal muss ich die "Grammatik" lernen... ich will nicht einfach irgendwelche einfachen und womöglich besseren Lösungen kopieren und anwenden, sondern erstmal wirklich die einzelnen Grundbausteine der Sprache kennenlernen um sie dann anzuwenden.

Wenn das ganze nur mit while gelöst werden soll, gibt es da eine Möglichkeit? Ohne arrays, keine for-Schleifen.
 
Zuletzt bearbeitet:

Kevin94

Top Contributor
while und for sind komplett gegeneinander austauschbar. Wenn du folgende for-Schleife hast:
Java:
for(int i=0;i<getWidth();i++)
{
    //Tu irgendwas
}
ist das identisch mit folgender while-Schleife:
Java:
int i=0;
while(i<getWidth())
{
    //Tu irgendwas
    i++;
}
 
E

emailundlos

Gast
Code:
for (int i = 0; i < leength(); i++) {
 // Huhn bei 0,i
 // Huhn bei i,0
 // Huhn bei i,leength()
 // Huhn bei leength(),i
}

:D ^^
 

thoff430

Mitglied
Juhu, es funktioniert... fast! :)

Ich kann jeweils nur eine vertikale und eine horizontale Reihe bauen. Der Rest will nicht.
Ich bekomme nur die unterste Reihe hin, vertausche ich die addObject-Methoden, nur die oberste. Ähnliches bei den vertikalen Reihen.

Java:
public void placeFences () {        
        while (x <= width ){
            Fence fence = new Fence();
            addObject(fence, x, width); // wird gemacht
            addObject(fence, x, 0);  // wird nicht gemacht
            x++;
        }
 
Zuletzt bearbeitet:
G

Gast2

Gast
Eventuell kannst du einen Fence nur einmal hinzufügen? Hast du mal versucht 2 verschiedene Instanzen zu übergeben?
 

thoff430

Mitglied
Ja gut, dann geht das anscheinend nicht :) Aber wie krieg ich jetzt trotzdem zwei horizontale und zwei vertikale Reihen hin...anstatt nur die Hälfte?
 
G

Gast2

Gast
Klappts denn mit zwei unterschiedlichen Instanzen? Wenn ja, dann erzeug halt mehrere Instanzen.
 

thoff430

Mitglied
Du meinst damit, ich soll noch eine zweite ChickenWorld-Instanz erstellen?

Ich gehe stark davon aus, dass wir das nicht machen sollen bzw es nicht nötig haben. Bei anderen konnte ich sehen, dass die Aufgabe mit nur einer Instanz gelöst wurde. Auch in der Aufgabenbeschreibung steht nichts dergleichen drin.

Würd ja gerne die genaue Aufgabenstellungen hier posten, allerdings sind diese auf Niederländisch.

edit: Hab eine zweite erstellt, allerdings kann ich nur eine davon anzeigen lassen. Entweder ChickenWorld oder ChickenWorld2, aber nicht beide "kombiniert".
 
Zuletzt bearbeitet:
G

Gast2

Gast
Ich spreche von den Fence instanzen, nicht von der ganzen Welt.
Du versuchst im Moment einen Zaun zweimal zu setzen, eventuell geht das ja gar nicht.
 

thoff430

Mitglied
Sorry, bin noch ein wenig schwer von Begriff :D

Java:
public void placeFences () {        
        while (x <= width){
            Fence fence = new Fence();
            Fence2 fence2 = new Fence2();
            addObject(fence, x, width); 
            addObject(fence2, x, 0);
            x++;
        }
        
        while (y <= width){
            Fence fence = new Fence();
            Fence2 fence2 = new Fence2();
            addObject(fence, width, y); 
            addObject(fence2, 0, y);
            y++;
        }

Funktioniert soweit ganz gut! Ich frag mich aber, ob es nicht auch nur mit einer Instanz möglich ist. Ich müsste sonst, damit das Huhn den Zaun auch als solchen erkennt, noch mehr anpassen als gefordert.

Kann ich nicht noch irgendwie praktisch Gebrauch von getHeight() machen?
 
Zuletzt bearbeitet:
G

Gast2

Gast
Warum hast du jetzt ne Klasse Fence2?
Tuts nicht einfach sowas?
Java:
Fence fence = new Fence();
Fence fence2 = new Fence();


Ich frag mich aber, ob es nicht auch nur mit einer Instanz möglich ist. Ich müsste sonst, damit das Huhn den Zaun auch als solchen erkennt, noch mehr anpassen als gefordert.
Ja anscheinend nicht.
 
E

emailundlos

Gast
Ich hab oben nicht bedacht, dass es nicht um Hühner um Zäunen geht, sondern um Zäune um Hühner. Somit müssen also Zäune statt Hühner gesetzt werden. ^^

Und andere Sache: Es kommt drauf an, welche Bestandteile Fence ausmachen, also was das für ein Objekt ist, welche Attribute und Eigenschaften es besitzt usw.
 

thoff430

Mitglied
Oh Gott, ich werfe hier in meinem Anfängertum noch wichtige Begriffe durcheinander. ;(

Es funktioniert jetzt wunderbar, vielen Dank!

@ emailundlos Falls es dich interessiert:

Java:
public class Fence  extends Actor
{
    private int height;
    
    public Fence () {
        height = 20;
    }
        
    public void scale (int percentage) {
        height = height * percentage / 100;
    }
    
    public int getHeight () {
        return height;
    }
}
 
E

emailundlos

Gast
Chicken muss wiederholt einen Schritt weitergehen. Wenn es vor einem Zaun steht, muss es sich nach rechts (oder links) drehen und weitergehen, bis sich neben Chicken kein Zaun mehr befindet oder es wieder vor einem Zaun steht. Dann muss es wieder nach rechts (oder links) drehen und so fortfahren. Einmal bei dem Feld angekommen, bei dem der Zaun anfing, hat es den Zaun einmal umrundet.
Code:
while (notFence)
    move
turnRight

while (notFinish)
    if (fenceLeft)
        if (notFenceFront)
            move
        else
            turnRight
    else
        turnLeft
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Überwältigt von der komplexen Java Welt Java Basics - Anfänger-Themen 29
S Warum erscheint bei mir "Hallo Welt" und nicht die aktuelle Eingabe? Java Basics - Anfänger-Themen 16
S Hallo Welt Java Basics - Anfänger-Themen 11
J Welt in GameOfLife klonen Java Basics - Anfänger-Themen 9
S Die Welt von Zuul Java Basics - Anfänger-Themen 2
A Greenfoot - Objekt im Vordergrund lassen, bei einer scrollbaren Welt ohne zentrierten Actor Java Basics - Anfänger-Themen 3
A Compiler-Fehler Hallo Welt Fehler Java Basics - Anfänger-Themen 5
P 2D Welt, Hashtable Java Basics - Anfänger-Themen 5
I Probleme bei der Abstraktion der realen Welt Java Basics - Anfänger-Themen 8
F Komme aus der Delphi-Welt und brauch jetz Java. Java Basics - Anfänger-Themen 5
5 hallo welt als .jar Java Basics - Anfänger-Themen 16
G Hallo Welt Java Basics - Anfänger-Themen 10
A Neuling in der Java Welt Java Basics - Anfänger-Themen 5
S Blutiger Anfänger- "Hallo Welt" unter JBuilder Java Basics - Anfänger-Themen 5
M While-Schleife mit Wartezeit Java Basics - Anfänger-Themen 15
Ranger229 Endless loop in while Schleife Java Basics - Anfänger-Themen 3
M Datentypen While-Schleife eine Java Methode erstellen Java Basics - Anfänger-Themen 3
Ostkreuz While Schleife neustarten Java Basics - Anfänger-Themen 20
S Erste Schritte do-while Schleife Münzwurf Java Basics - Anfänger-Themen 1
S while Schleife Taschenrechner Java Basics - Anfänger-Themen 1
P Best Practice While loop schleife Java Basics - Anfänger-Themen 5
S Erste Schritte While Schleifen Java Basics - Anfänger-Themen 11
A Erste Schritte Aufgabe mit while Schleife Java Basics - Anfänger-Themen 11
R do while Schleife Verständnisfrage Java Basics - Anfänger-Themen 2
Say Fehlenden Code finden in einer while-Schleife? Java Basics - Anfänger-Themen 11
Say do-While Code Ausführung Java Basics - Anfänger-Themen 3
Say do-while Syntak Java Basics - Anfänger-Themen 3
A Return in While Schleife Java Basics - Anfänger-Themen 6
M Erste Schritte While Schleife / Ausgabe von buchstabe & ASCII Wert Java Basics - Anfänger-Themen 4
J do..while Schleife Java Basics - Anfänger-Themen 14
W Wiederkehrende Konsolen-Anzeige mit do-While?! Java Basics - Anfänger-Themen 33
X Enum Abfrage ohne if, for, while oder switch Java Basics - Anfänger-Themen 21
java-starter Erste Schritte Mit While Schleifen Programme schreiben Java Basics - Anfänger-Themen 4
berserkerdq2 Brauche ich while != -1, wenn ich immer einen BufferedReader verwende? Java Basics - Anfänger-Themen 8
B Zuweisungen und Methodenaufrufe in Bedingung der while Schleife? Java Basics - Anfänger-Themen 2
JavaBeginner22 Würfeln bis 6 while Schleife Java Basics - Anfänger-Themen 13
G while.next() Verständnisfrage Java Basics - Anfänger-Themen 16
L while Schleife mit 2 Bedingung endet nicht Java Basics - Anfänger-Themen 3
D Array mit while-schleife Java Basics - Anfänger-Themen 12
B do while Schleife Java Basics - Anfänger-Themen 3
R While-Loop der die Einträge eines Arrays in umgekehrter Reihenfolge anzeigt Java Basics - Anfänger-Themen 3
SergioCK Do while Schleife wiederholen Java Basics - Anfänger-Themen 14
Informatikf Methoden While Schleife Java Basics - Anfänger-Themen 3
M While Schleife? Java Basics - Anfänger-Themen 4
C Sind die while-Schleifen richtig in for-Schleifen ersetzt worden? Java Basics - Anfänger-Themen 8
Poppigescorn Quersumme Berechnen mit einer While Schleife Java Basics - Anfänger-Themen 13
Zwanglos Warum wird nur die erste Zeile im while Block ausgeführt? Java Basics - Anfänger-Themen 8
M Wie kann ich Werte die in einer While Schleife sind weiter genutzt werden? Java Basics - Anfänger-Themen 7
H Kann eine while-Schleife ein Programm blockieren? Java Basics - Anfänger-Themen 8
O Methode in while-Schleife aufrufen geht nur beim ersten Mal Java Basics - Anfänger-Themen 2
A Wie schaffe ich das eine while Schleife addiert danach subtrahirt? Java Basics - Anfänger-Themen 1
Aeon Erste Schritte Preise berechnen mit do-while Java Basics - Anfänger-Themen 9
J for /while Schleife Java Basics - Anfänger-Themen 5
A While Schleife - buubelsort methode Java Basics - Anfänger-Themen 2
J Wie kann ich hier eine While schleife einbauen? Java Basics - Anfänger-Themen 3
S While-Schleife geht in Endlosschleife über, warum? Java Basics - Anfänger-Themen 6
M While-Schleifen-Fehler Java Basics - Anfänger-Themen 4
S Do-While-Schleife Java Basics - Anfänger-Themen 2
S While Schleife Java Basics - Anfänger-Themen 4
S Do-While Schleife Java Basics - Anfänger-Themen 6
J Von While zu for Java Basics - Anfänger-Themen 42
G While/If Programm Java Basics - Anfänger-Themen 2
L String in Do-While-Schleife Abbruchkriterium Java Basics - Anfänger-Themen 1
CptK Methoden While-Schleife so lange ausführen, wie Methode etwas zurückgibt Java Basics - Anfänger-Themen 2
G Flussdiagramm-Do while Java Basics - Anfänger-Themen 4
G If / While Programm (Datei auslesen) Java Basics - Anfänger-Themen 6
B Verschachtelung von For-Schleife in While Schleife Java Basics - Anfänger-Themen 14
G while schleife Java Basics - Anfänger-Themen 11
G while schleife mit array Java Basics - Anfänger-Themen 12
L Scanner schließen in While-Schleife? Java Basics - Anfänger-Themen 2
I Do-While / Kalkulator / Bitte um Hilfe Java Basics - Anfänger-Themen 9
G While schleife Java Basics - Anfänger-Themen 2
mor16Euro Erste Schritte Wie nennt man eine While oder For schleife die nie Ausgeführt wird Java Basics - Anfänger-Themen 5
C Verständnisfrage bezüglich der Do-While Schleife Java Basics - Anfänger-Themen 9
B OOP While Schleife läuft Endlos durch externen aufruf Java Basics - Anfänger-Themen 2
N while Schleife wird nicht beendet, obwohl Sie hätte breaken sollen Java Basics - Anfänger-Themen 4
B mehrere Werte mit scanner und while schleife einlesen, max berechnen bzw addieren Java Basics - Anfänger-Themen 2
D While Schleife bei Bedarf durch Eingabe stoppen Java Basics - Anfänger-Themen 15
O Erste Schritte Zahlendreieck mit While Java Basics - Anfänger-Themen 2
D Break Sprungmarken Problem einer While True in While True Java Basics - Anfänger-Themen 6
A Erste Schritte while-Schleife Java Basics - Anfänger-Themen 38
W While-Loop unterbrechen Java Basics - Anfänger-Themen 4
X While Do schleife funtioniert nicht Java Basics - Anfänger-Themen 5
J 2 "while"-Anweisungen in einer do-Schleife? Java Basics - Anfänger-Themen 4
W while Schleife und Bedingung Java Basics - Anfänger-Themen 11
T While Schleife funktioniert nicht Java Basics - Anfänger-Themen 14
J Input/Output Strings aneinander reihen mit while schleife Java Basics - Anfänger-Themen 25
M Methoden while liefert nur den ersten Datensatz Java Basics - Anfänger-Themen 12
S Try-Catch in Verwendung einer while Schleife Java Basics - Anfänger-Themen 2
P a cannot be resolved bei einer do while Schleife Java Basics - Anfänger-Themen 1
J While Schleife Java Basics - Anfänger-Themen 19
S While-Schleifen Ausgabe als String? Java Basics - Anfänger-Themen 1
L Taschenrechner mit switch und while funktioniert noch nicht richtig Java Basics - Anfänger-Themen 22
Z Return in While-Schleife Java Basics - Anfänger-Themen 7
N Methode mit While-Schleife und If-Bedingung und Array-Initialisierung Java Basics - Anfänger-Themen 4
V Erste Schritte Habe Fragen zu der For und While Schleife als auch Inkrement und Dekrement Java Basics - Anfänger-Themen 4
helldunkel While Schleife trotz false Java Basics - Anfänger-Themen 4
E Threads Thread in While-Schleife nur einmal starten Java Basics - Anfänger-Themen 2
M Erste Schritte while boolean=false läuft nur bei true??? Java Basics - Anfänger-Themen 23
R While-Schleife macht nicht was sie soll Java Basics - Anfänger-Themen 24

Ähnliche Java Themen


Oben