2012-04-03 19 views
0
 foreach (int i in a.set) 
     { 
      foreach (int k in b.set) 
      { 
       if (i < k) 
       { 
        return true;         
       } 
       else if (i > k) 
       { 
        return false; 
       } 
      } 
     } 


     return false; 
    } 

I zwei Gruppen erhielt ein Satz 3,4,6 umfasst b.set 3,4,5Nested foreach Schleifen C#

Das Problem beinhaltet ist, dass die äußere Schleife nur einmal iteriert. Aber es enthält 3 Elemente, warum ist das so?

+0

Return Call unterbricht nicht die Schleife, sondern verlässt die Methode. –

+0

es sei denn i == k die innere Schleife iteriert nicht entweder – Goran

+2

Haben Sie wirklich Zweifel ..? return false bricht die Iteration der Schleife ab. Um dieselbe Funktionalität zu erreichen, verwenden Sie break. – gout

Antwort

7

Sie kehren in Ihre innere Schleife zurück. Dies beendet sofort die enthaltene Methode.

  • i ist 3 (das erste Element des a.set - lassen Sie uns diese Bestellung nun annehmen).
    • k3 ist (wie oben)
    • k4 ist - daher der if Zustand in der inneren Schleife erfüllt ist, und das Verfahren kehrt mit true.

Wie Sie sehen können, bekommt man nicht die Chance, Iterieren über alle Werte von a.set bevor sie aus dem Verfahren zurück.

+0

Wusste das nicht. Vielen Dank. – saturn

1

Das liegt daran, dass Sie Ihre foreach-loop beenden, indem Sie einen Wert für die erste Iteration zurückgeben.

1

Basierend auf dem von Ihnen bereitgestellten Code und den Daten wird die innere Schleife die Funktion mit einer Rückgabe von true in der zweiten Iteration beenden. Es gibt keinen Weg in Ihrem Code für die äußere Foreach, mehr als einmal zu iterieren.

Wenn Sie Code schreiben möchten, die true zurückgibt, wenn an irgendeiner Stelle gesetzt a eine Zahl kleiner ist als gesetzt b, sollten Sie dies tun:

foreach (int i in a.set) 
{ 
    foreach (int k in b.set) 
    { 
     if (i < k) 
     { 
      return true;         
     } 
    } 
} 
return false; 
+0

Ich verstehe nicht, warum ich einen Downvote habe ... –

2

Use „break“ insted „return“, es unterbricht nur eine Ebene

0

Vielleicht möchten Sie Pause statt Rückkehr verwenden - wenn Sie zurückkehren (was bei der zweiten Iteration der inneren Schleife passiert, wenn 3> 4), wird es die Ausführung der Schleife stoppen und zurückkehren Von der Funktion/Methode haben Sie dies in