Return innerhalb einer for-Schleife, wie kann man

Hallo,

wie kann man den Abbruch durch return innerhalb einer for-Schleife verhindern? Hier eine Beispiel-Methode:

public int test()
{
 for (int i=0;i

Ich möchte in der Main-Methode in einer weiteren Schleife alle **i** ausgeben. Bei diesem sehr einfachen Beispiel macht das vielleicht wenig Sinn, aber ist ja nur ein Beispiel. :wink:

Liebe Grüße
Hugo

Hallo Hugo,

ich kann anhand deiner Beschreibung zwar nicht wirklich ergründen, was du genau tun möchtest, aber suchst du evtl. nach dem Schlüsselwort _ break _ um die for-Schleife zu verlassen?

Ciao, Bill

Hi Bill,

vielen Dank für deine Antwort.
Nein, eigentlich möchte ich genau das Gegenteil erreichen. Sobald die Bedingung erfüllt ist, das ist ja schon bei i=0 der Fall, wird mit return i zurückgegeben und die Methode verlassen. Ich möchte aber beim Methodenaufruf jedes i ausgeben, auf das die Bedingung zutrifft (hier: 0, 2, 4, 6, 8), in dem ich die Methode innerhalb einer Schleife mehrfach aufrufe.

public class Test
{
 public static void main (String[] args)
 {
 for (int i=0;0

So kann das ja allerdings nicht funktionieren, weil ich beim Methodenaufruf gar keinen Parameter übergebe (der ja auch nicht verlangt ist). Ich vermute, dass ich die System.out.print-Methode direkt innerhalb der for-Schleife der test-Methode aufrufen muss!?

Liebe Grüße
Hugo

Moien

public int test()
{ 
 boolean foundValue = false;
 int toReturn = -1;
 for (int i=0;i




> Bei diesem sehr einfachen  
> Beispiel macht das vielleicht wenig Sinn, aber ist ja nur ein  
> Beispiel. :wink:


Das macht auch bei komplexeren Beispielen keinen Sinn. Du solltest den Aufbau des Programms nochmal überdenken.

cu

Das macht auch bei komplexeren Beispielen keinen Sinn. Du
solltest den Aufbau des Programms nochmal überdenken.

cu

Hi pumpkin,

bitte etwas konkreter…

Liebe Grüße
Hugo

Moien

bitte etwas konkreter…

Naja, willst du alle Treffer oder nur den ersten?

Wenns nur der erste sein soll hat man nach dem ersten abzubrechen, fertig.

Wenn es alle werden sollen dann bau ein Callback das für jeden Treffer aufgerufen wird. Oder bau eine Liste mit allen Treffern auf und gibt die zurück.

Wenn du zwischen den 2 Modi umschalten möchtest dann nimm das Callback, aber mit einer Rückgabe die andeutet wieviele Treffer noch nötig sind.

cu

Naja, willst du alle Treffer oder nur den ersten?

Wenns nur der erste sein soll hat man nach dem ersten
abzubrechen, fertig.

Wenn es alle werden sollen dann bau ein Callback das für jeden
Treffer aufgerufen wird. Oder bau eine Liste mit allen
Treffern auf und gibt die zurück.

Wenn du zwischen den 2 Modi umschalten möchtest dann nimm das
Callback, aber mit einer Rückgabe die andeutet wieviele
Treffer noch nötig sind.

cu

Hi pumpkin,

vielen Dank für deine Antwort.

Wie unter /t/return-innerhalb-einer-for-schleife-wie-kann-man/…

Liebe Grüße
Hugo

Moien

Was habe ich mir
denn unter einem Callback genau vorzustellen?

Man definiert ein Interface oder Klasse mit einer Methode im Styl:

public boolean foundSomething (Object value)

Die ruft man bei jedem Treffer auf. Wenn false zurückkommt hört man mit der Suche auf. Bei true macht man weiter. In die test-Methode übergibt man eine Objekt welches das Callback implementiert:

public void test (values-to-test, Callback callme)

Das Prinzip ist extrem flexible. Wenn man die Testbedingung ähnlich kapselt (public boolean test (value1, value2)) kommt man zu 3 Klassen: Einem walker der alle Werte durchgeht, einem Tester der sagen kann ob etwas erfüllt ist oder nicht und einem Auswerter der nur die Treffer bekommt. Man kann also beliebige Teile austauschen und hat trotzdem mehr oder weniger den gleichen Code am laufen.

Man kann die PropertyChangeListener/Support-Klassen dafür missbrauchen (ist recht langsam).

Wie du
sicherlich merkst, bin ich noch nicht so richtig fit auf dem
Gebiet.

Hol dir ein Buch zu diesem Thema: en.wikipedia.org/wiki/Design_pattern_(computer_science) (der link geht nicht weil w-w-w ( und ) nicht automatisch in URLs aufnimmt)

cu

Hi pumpkin,

vielen Dank für deine ausführliche Antwort.

Eigentlich kann ich doch für mein Problem einfach folgenden Code benutzen:

public void test()
{
 for (int i=0;i

Liebe Grüße
Hugo

Moien

Eigentlich kann ich doch für mein Problem einfach folgenden
Code benutzen:

Und wo ist deine Rückgabe um die es von Anfang an ging?

cu

Und wo ist deine Rückgabe um die es von Anfang an ging?

Die bleibt dabei auf der Strecke. :frowning: