Java lernen mit BlueJ Aufgabe 4.26

ToBe4minimal

Mitglied
Hallo,

ich gehe gerade komplett nach und nach das oben genannte Buch durch und habe eine Frage zur oben genannten Aufgabe.

In dieser Aufgabe soll eine Methode beenden() geschrieben werden.
In den Lösungen die ich habe, wird diese Aufgabe mit einer for-each Schleife realisiert.

Ich persönlich jedoch möchte es auch mit anderen Schleifen versuchen, hänge aber schon ewig an einem Problem, dass ich scheinbar generell noch nicht richtig verstanden habe.

Der Code der Lösung ist folgender:

Java:
public void beenden()
    { 
        for(Posten posten : postenliste) 
        {
            System.out.println(posten.gibNummer() + ": " + posten.gibBeschreibung()); 
            // Enthält sämtliche Details eines Höchstgebots. 
            Gebot hoechstesGebot = posten.gibHoechstesGebot(); 
            if(hoechstesGebot != null) 
            { 
                System.out.println(" Höchstbietender: " + hoechstesGebot.gibBieter().gibName()); 
                System.out.println(" Gebot: " + hoechstesGebot.gibHoehe()); 
            } 
            else 
            { 
                System.out.println(" Unverkauft"); 
            } 
        }
    }


Ich möchte jetzt die gleiche Methode mit einer while Schleife realisieren.
Problem: Die externen Methodenaufrufe die dort benutzt wurden sind so nicht möglich, da die Variable posten deklariert werden muss. Ich weiß aber einfach nicht wie.

Kurz gesagt, ich verstehe die externen Methodenaufrufe noch nicht so ganz, auch wenn ich weiß das man diese als Objektname.Methodenname(Parameter) aufbaut, so wie in diesem Fall zum Beispiel posten.gibNummer().

In der for each Schleife wird in der Bedingung oben ja mit (Posten posten : postenliste) ja die Variable posten deklariert, deswegen dort keine Fehlermeldung.

In der while Schleife ist die Bedingung aber ja anders.

Man würde anfangen mit:

int index = 0;
while (index < postenliste.size())
{
usw.


Ich habe also absolut noch Probleme damit, zu wissen welchen Objektnamen ich benutzen muss bei den externen Methodenaufrufen.

Hoffe ihr könnt mir helfen, sitz jetzt ewig dran, kriege es aber einfach nicht heraus.


LG
Tobi
 
Zuletzt bearbeitet:

Creativ

Aktives Mitglied
Wenn ich das jetzt richtig verstanden habe, kannst du dir ja in der while-Schleife die Variable posten selber anlegen:

Java:
int index = 0;
while (index < postenliste.size())
{
Posten posten = postenliste.get(index);
// das andere zeug
index++;
}
 

ToBe4minimal

Mitglied
Mit Posten posten = ... habe ich auch angefangen, wusste aber dann nicht mehr weiter.

Also wenn ich das jetzt richtig verstanden habe, deklariert man sich einfach die variablen, die man dann beim externen Methodenaufruf als Objektnamen benutzt einfach selbst??

Jedenfalls, sofern die Variable nicht bereits in der Klasse deklariert wurde??
 

ToBe4minimal

Mitglied
Also tatsächlich, es funktioniert!!!

Glaubt ihr mir, es war diese eine kleine Sache, dass ich nicht wusste wie ich die Variable posten initialisieren soll??!!!

postenliste.get(index)

DAS WARS!!!

Danke!!
 
G

gman

Gast
deklariert man sich einfach die variablen, die man dann beim externen Methodenaufruf als Objektnamen benutzt einfach selbst??

Naja, nicht so ganz. Du hast ja die Liste "postenliste". Mit der foreach-Schleife wird automatisch
bei jedem Schleifendurchlauf deine Variable "posten" mit einem Objekt vom Typ "Posten" gefüllt.

Wenn du das jetzt mit einer while-Schleife umsetzen willst, so musst du eben genau dies selber
machen, mit:

Java:
Posten posten = postenliste.get(index);

holst du aus der Liste das Objekt was du gerade bearbeiten willst. Und damit du nicht immer das
selbe Objekt hast zählst du am Ende der Schleife die Variable "index" hoch.

Ich hoffe, dadurch wird es noch etwas deutlicher.
 

ToBe4minimal

Mitglied
Naja, nicht so ganz. Du hast ja die Liste "postenliste". Mit der foreach-Schleife wird automatisch
bei jedem Schleifendurchlauf deine Variable "posten" mit einem Objekt vom Typ "Posten" gefüllt.

Wenn du das jetzt mit einer while-Schleife umsetzen willst, so musst du eben genau dies selber
machen, mit:

Java:
Posten posten = postenliste.get(index);

holst du aus der Liste das Objekt was du gerade bearbeiten willst. Und damit du nicht immer das
selbe Objekt hast zählst du am Ende der Schleife die Variable "index" hoch.

Ich hoffe, dadurch wird es noch etwas deutlicher.


Hey,

ja danke!!

Auf jeden Fall etwas...
Das war das, was ich noch nicht so ganz verstanden habe.
 
G

Gastredner

Gast
Noch ein kleiner Hinweis am Rande: Du hast keine reine for-Schleife, sondern die erweiterte-for- bzw. foreach-Schleife verwendet. Die normale for-Schleife nutzt eine (oder mehrere) Zählvariable und ändert diese im Lauf:
Java:
for (int i=0; i<postenliste.size(); i++) {
Posten posten = postenliste.get(i);
// ...
}
 

Swoop

Gesperrter Benutzer
außerdem wäre es vllt ganz sinnvol posten außerhalb zu erzeugen damit nicht immer wieder ein neues Objekt erzeugt wird sondern das alte überschrieben wird...

Java:
Posten posten;
for (int i=0; i<postenliste.size(); i++) {
posten = postenliste.get(i);
// ...
}
 
M

maki

Gast
außerdem wäre es vllt ganz sinnvol posten außerhalb zu erzeugen damit nicht immer wieder ein neues Objekt erzeugt wird sondern das alte überschrieben wird...

Java:
Posten posten;
for (int i=0; i<postenliste.size(); i++) {
posten = postenliste.get(i);
// ...
}
Nein wäre nicht sinnvoll, es wird auch so kein neues Objekt erzeugt.
 

badzooaka

Neues Mitglied
Hey
um elemente einer Sammlung zu iritieren brauchst entweder die for each schleife(type variable:Sammlung) oder eine while schleife mit einem Iterator.
du kannst so machen:
Iterator<Posten> it= Posten.iterator();
while(it.hasNext())
{ it.next();
System.out.println(posten.gibNummer()+": "+ posten.gibBeschreibung());
// Enthält sämtliche Details eines Höchstgebots.
Gebot hoechstesGebot = posten.gibHoechstesGebot();
if(hoechstesGebot !=null)
{
System.out.println(" Höchstbietender: "+ hoechstesGebot.gibBieter().gibName());
System.out.println(" Gebot: "+ hoechstesGebot.gibHoehe());
}
else
{
System.out.println(" Unverkauft");
}
}
 

Neue Themen


Oben