2012-02-29 14 views
1

問題は何ですか、私は別のループ内でネストされた2つのループを持っています。外部ループはプロシージャを呼び出し、内部ループはプロシージャの属性を使用するように設定します。問題は、手順は私がループを終了するwan'tは、< - 属性を呼び出すと、プロシージャを呼び出して内側のループを再入力することです。分時には、内側のループ内ですべての条件が真であるためにposが1回だけ設定されます。これは、その都度置き換えられることを意味します。私はposの出口を内部ループに設定し、プロシージャを呼び出して内部ループを再入力し、posに別の値を設定できるようにしたいですか?どんな助けも素晴らしいだろう!ここ内部ループ、プロシージャコールの混乱

For Each val As String In vals 


     If creditPoints = "20" And semester = "1" And year = "Year 1" Then 

      For Each position In MyPosList 

       If position.strLabel = "a1" And available(0) <> "False" Then 
        pos = position.strX & " " & position.strY 
        count += 1 
        available(0) = blnavailable 
       ElseIf position.strLabel = "b1" And available(1) <> "False" Then 
        pos = position.strX & " " & position.strY 
        count += 1 
        available(1) = blnavailable    
Next 
shortfat(semester, pos, creditPoints, title, year, modStatus, count) 
     End If 
next 
+0

コードが少なすぎる場合は、短い例を記載してください。 – vulkanino

+0

thats短縮しました – aspiringCoder

+0

なぜ、内部ループのプロシージャを呼び出さないのですか? – Henrik

答えて

0

これらの条件のうちの1つが満たされたときに、内側のループから抜け出そうとしていますか?もしそうなら、それはExitキーワードのためのものです。あなたは本当にあなた自身も健全性チェックにフラグを立てるべきです。

''//Flag so that we know if we actually found a position 
Dim FoundPosition as Boolean 
For Each val As String In vals 
    ''//Reset the flag and assume that are conditions are met 
    FoundPosition = False 
    If creditPoints = "20" And semester = "1" And year = "Year 1" Then 
     For Each position In MyPosList 
      If position.strLabel = "a1" And available(0) <> "False" Then 
       pos = position.strX & " " & position.strY 
       count += 1 
       available(0) = blnavailable 
       ''//Flag that our conditions are met 
       FoundPosition = True 
       ''//Exit from the inner loop 
       Exit For 
      ElseIf position.strLabel = "b1" And available(1) <> "False" Then 
       pos = position.strX & " " & position.strY 
       count += 1 
       available(1) = blnavailable 
       ''//Flag that our conditions are met 
       FoundPosition = True 
       ''//Exit from the inner loop 
       Exit For 
      End If 
     Next 
     ''//Sanity check to ensure that our conditions are met 
     If FoundPosition Then 
      shortfat(semester, pos, creditPoints, title, year, modStatus, count) 
     Else 
      ''//Do something here, either Throw an error or safely handle this case otherwise 
     End If 
    End If 
Next 
+0

ブール値を使ってループを終了する方法はありますか?ので、if内で好きな位置がtrueに設定されている場合は、ループを停止? – aspiringCoder

+0

@Stefan Reaney、私はあなたが何を意味するのか分かりません。 「Exit For」は、あなたが早期にループから脱出する方法です。あなたはあなたが望む条件の下でそれを行うことができます。だから、あなたがブール値をチェックしたいなら、私は推測します。 –

0

がコードである「私は、内側のループを終了POSを設定 プロシージャを呼び出すと、内側のループを再入力すると、それは別の 値をposに設定できるようにしたいの?」

これは、FORループよりもWHILEループの方が優れています。

ここに暗闇の中でだけで刺していますが、shortfatが良好な値を生成しているかどうかを確認できるようにしたいように聞こえます。それがなければ、ポジションを再計算したいと思う。私がやるべき最初のことは、変更することですshortfat私の例では、私はそれがブール値を返すようにするいくつかの種類の値を返す。

Dim blnDidThisDoWhatIWant As Boolean 

    For Each val As String In vals 
     If creditPoints = "20" And semester = "1" And Year() = "Year 1" Then 
      blnDidThisDoWhatIWant = False 

      While blnDidThisDoWhatIWant = False 
       For Each position In MyPosList 
        If position.strLabel = "a1" And available(0) <> "False" Then 
         pos = position.strX & " " & position.strY 
         count += 1 
         available(0) = blnavailable 
        ElseIf position.strLabel = "b1" And available(1) <> "False" Then 
         pos = position.strX & " " & position.strY 
         count += 1 
         available(1) = blnavailable 
        End If 
       Next 

       blnDidThisDoWhatIWant = shortfat(semester, pos, creditPoints, title, Year, modStatus, count) 
      End While 
     End If 
    Next 

これにより、内側ループを再入力することができます。問題は、ポジションが異なる方法で計算されない限り、無限大になることです。それはあなた自身で解決しなければならないものです。これが正しい方向に向けるのを助けてくれることを願っています。