return innerhalb einer for-Schleife, wie kann man

Von: , Frage gestellt am Di, 13. Mai 2008

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<10;i++)
{
if (i%2==0
{
return i;
}
}
return -1;
}


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

Liebe Grüße
Hugo

10 Antworten zu dieser Frage

  1. Antwort von nach 3 Stunden 0 hilfreich
    Re: return innerhalb einer for-Schleife, wie kann

    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

    • Antwort von nach 17 Stunden 0 hilfreich
      Re^2: return innerhalb einer for-Schleife, wie kan

      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<10;i++)
      {
      System.out.println(test());
      }
      }
      }
      


      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

  2. Antwort von nach 18 Stunden 0 hilfreich
    Re: return innerhalb einer for-Schleife, wie kann

    Moien

    public int test()
    { 
    boolean foundValue = false;
    int toReturn = -1;
    for (int i=0;i<10;i++)
    {
    if (i%2==0
    {
    if (!foundValue){
    toReturn = i;
    foundValue = true;
    }
    System.out.println (i);
    }
    }
    return toReturn;
    }
    
    Bei diesem sehr einfachen
    Beispiel macht das vielleicht wenig Sinn, aber ist ja nur ein
    Beispiel. ;-)
    Das macht auch bei komplexeren Beispielen keinen Sinn. Du solltest den Aufbau des Programms nochmal überdenken.

    cu

    • Antwort von nach 23 Stunden 0 hilfreich
      Re^2: return innerhalb einer for-Schleife, wie kan

      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

      • Antwort von nach 23 Stunden 0 hilfreich
        Re^3: return innerhalb einer for-Schleife, wie kan

        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

        • Antwort von nach einem Tag 0 hilfreich
          Re^4: return innerhalb einer for-Schleife, wie kan

          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 http://www.wer-weiss-was.de/article/4600217 erwähnt, möchte ich alle Treffer ausgeben. Was habe ich mir denn unter einem Callback genau vorzustellen? Wie du sicherlich merkst, bin ich noch nicht so richtig fit auf dem Gebiet. Also bitte so erklären, als wäre ich drei Jahre alt. ;-)

          Liebe Grüße
          Hugo

          • Antwort von nach einem Tag 0 hilfreich
            Re^5: return innerhalb einer for-Schleife, wie kan

            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

            • Antwort von nach 4 Tagen 0 hilfreich
              Re^6: return innerhalb einer for-Schleife, wie kan

              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<10;i++)
              {
              if (i%2==0
              {
              System.out.println(i);
              }
              }
              }
              


              Liebe Grüße
              Hugo

            • Antwort von nach 5 Tagen 0 hilfreich
              Re^7: return innerhalb einer for-Schleife, wie kan

              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



Keine passende Antwort gefunden? Jetzt eigene Frage stellen!