Methoden "Unschöne" Break-Anweisung aus verschachtelter Funktion entfernen

sapcandy

Neues Mitglied
Hallo zusammen,

aus dem nachfolgendem Codestück möchte ich die Break-Anweisung entfernen, um ein besseren Quellcode zu haben.

Java:
for (int aktuelleLadung : loadList.beladung) {
            for (Container aktuellerContainer : container) {
                if (aktuellerContainer.freierPlatzFuer(aktuelleLadung)) {
                    aktuellerContainer.speicherLadung(aktuelleLadung);
                    break;
                }
            }
        }

Es handelt sich hierbei um einen Algorithmus für das "bin-packing". Entferne ich das Break, wird jeder Container immer wieder mit den gleichen Paketen gefüllt. Leider haben meine bisherigen Versuche nicht zum gewünschten Erfolg geführt.
 

Sogomn

Bekanntes Mitglied
Nach welchem Schema sollen die Container denn gefüllt werden? Soll die Ladung gleich verteilt werden oder jeweils so viel wie möglich auf einen einzelnen Container?
 

Kababär

Top Contributor
aus dem nachfolgendem Codestück möchte ich die Break-Anweisung entfernen, um ein besseren Quellcode zu haben.
Meiner Meinung nach ist es besser, wenn ein break drin steht (falls benötigt).
Beispielsweise du hast eine Liste mit int-Werten.
Jetzt suchst du eine spezielle Zahl. Angenommen die Liste hat 10.000 Elemente und die gesuchte Zahl steht an 4. Stelle. Mit einem break läufst du jetzt bis zum 4. Element, ohne Break läuft er komplett durch.

An deiner Stelle wird ja nur die innere Schleife abgebrochen, was Sinn macht.
Ich denke allerdings, dass du die 2 For-Schleifen tauschen müsstest, oder?
Angenommen du hast 3 leere Container, in die jeweils die Zahl 100 reinpasst. Dann befüllst du alle 3 Container mit 100. Aber eine Ladung kann doch nur in einen Container, oder?
 

JStein52

Top Contributor
Du hast eine Ladeliste deren Ladungen du auf Container verteilen musst. Und du hast eine Reihe von Containern auf die du die Ladungen verteilen musst. Wenn du einen passenden Container gefunden hast dann musst du diese Schleife beenden und mit der nächsten Ladung weitermachen. Warum willst du jetzt Verrenkungen machen um den Code den du jetzt hast kryptischer zu machen um ein break wegzukriegen ?
 

sapcandy

Neues Mitglied
Nach welchem Schema sollen die Container denn gefüllt werden? Soll die Ladung gleich verteilt werden oder jeweils so viel wie möglich auf einen einzelnen Container?

Es wird sowohl First-Fit, also auch First-Fit-Decreasing benutzt.

Warum ist der dann besser ?

Gewohnt aus meiner Prog-Anfangszeit, wurde damals nicht gerne gesehen. (Gab auch massiven Punktabzug)

An deiner Stelle wird ja nur die innere Schleife abgebrochen, was Sinn macht.
Ich denke allerdings, dass du die 2 For-Schleifen tauschen müsstest, oder?
Angenommen du hast 3 leere Container, in die jeweils die Zahl 100 reinpasst. Dann befüllst du alle 3 Container mit 100. Aber eine Ladung kann doch nur in einen Container, oder?

Verwende ich break im Algorithmus, läuft mein Programm wie gewünscht (kann den Quellcode gerne per PM teilen). Eine Ladung kann logischerweise, wie du sagtest, nur einmal verladen werden. Entferne ich break, werden die Ladungen in den Container zwar geladen, stehen allerdings dann wieder für die anderen Container zur Verfügung.

Vielen Dank für die Diskussion.
 

Sogomn

Bekanntes Mitglied
Du könntest Alternativ, statt die Container innerhalb der Ladung zu iterieren, die Ladung innerhalb der Container durchlaufen. Also der Reihe nach die Container befüllen, bis sie voll sind.

Edit: Das würde es nur noch schwieriger machen, ich hab' Mist erzählt.
 

mrBrown

Super-Moderator
Mitarbeiter
Oder einfach das Suchen des passenden Containers in eine eigene Funktion auslagern, dann erübrigt sich die innere Schleife und es bleiben nur zwei Methodenaufrufe.
 

mrBrown

Super-Moderator
Mitarbeiter
Aber auch da muss er über alle Container gehen und wenn er den nächsten passenden gefunden hat die Schleife beenden ;);)
container.stream().filter(aktuellerContainer -> aktuellerContainer.freierPlatzFuer(aktuelleLadung)).findFirst()

Ganz ohne Break ;P

Und wenn das break in einer eigenen Funktion ständ, würds in dieser nicht mehr stören ;)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D break block by label Allgemeine Java-Themen 14
O while - Schleife unterbrechen mit break; Allgemeine Java-Themen 5
meez nix continue und break Allgemeine Java-Themen 19
M NamingService break down Allgemeine Java-Themen 2
E Es ist nicht möglich, eine Batch-Anweisung auszuführen. Allgemeine Java-Themen 9
W Switch Anweisung Allgemeine Java-Themen 4
killig HashMap mit if-Anweisung überprüfen Allgemeine Java-Themen 4
MiMa Switch Anweisung Allgemeine Java-Themen 10
E Die if-Anweisung in einer Java Bean bzw. in einem Servlet? Allgemeine Java-Themen 8
O Darstellung von else if anweisung im struktogramm? Allgemeine Java-Themen 1
J VB --> Java (Set Anweisung) Allgemeine Java-Themen 2
M if-Anweisung in endlosschleifewird nicht aufgerufen Allgemeine Java-Themen 2
J if else Anweisung macht nicht was es soll. Wieso? Allgemeine Java-Themen 10
S Else-Anweisung Problem Allgemeine Java-Themen 17
S Erste Schritte if-Anweisung in for- oder while-schleife umwandeln Allgemeine Java-Themen 3
S Problem mit if-Anweisung Allgemeine Java-Themen 6
K import- Anweisung fehlerhaft und andere Fehler (eclipse) Allgemeine Java-Themen 2
R if-Anweisung wird angemeckert, andere identische nicht Allgemeine Java-Themen 9
@ [Eclipse] Fehlermeldung bei import-Anweisung Allgemeine Java-Themen 3
M try-catch (Wie erzwing ich die catch-Anweisung)? Allgemeine Java-Themen 13
M Problem mit if-Anweisung Allgemeine Java-Themen 10
S mehrfach if-anweisung Allgemeine Java-Themen 8
B Zwei Bedingungen für eine Anweisung Allgemeine Java-Themen 4

Ähnliche Java Themen

Neue Themen


Oben