2014-08-30 76 views
1

我有问题跳过执行时代码的某个特定部分。使用GoTo跳过代码(递归)

Dim turn as Integer = 1 

Function recurs1() 

    If turn = 9 Then 
     GoTo Endline 
    End If 

    For i = 0 To 5 
     For j = 0 To 5 
      If (arr(i, j) <> 10 And arr(i, j) <> 20) Then 
       If chance Mod 2 = 1 Then 
        MsgBox("Intialized (" & i & "," & j & ") To 10") 'Line X 
        arr(i, j) = 10 
       ElseIf chance Mod 2 = 0 Then 
        MsgBox("Intialized (" & i & "," & j & ") To 20") 'Line Y 
        arr(i, j) = 20 
       End If 
       turn += 1 'Updating turn 
       recurs1() 'Recursion takes place here 
      End If 
     Next 
    Next 

Endline: 

    Return Nothing 

End Function 

根据我的理解,代码应该在turn的值为9之后停止赋值给数组,并且应该返回流到调用函数/ sub。但是,它会继续分配值,并根据转弯的值打印行X或行Y.

如果允许的话,反过来增量高达37

值我会欣赏一些帮助,从别人的代码比我更深入的了解这个问题。

非常感谢。

+0

为什么使用SQL注释语法? – 2014-08-30 10:44:36

+0

错误,只是为了让它更明显,它是一个评论。不过,我只把它放在这里。不在父代码中。 – Jackdaw 2014-08-30 10:47:48

+1

我讨厌'Go To',并且你的代码不会停在'turn = 9'处。只有在调用函数'recurs1()' – bansi 2014-08-30 10:48:01

回答

1

您已将递归调用放在两个for循环中。该函数将被递归地调用,直到turn = 9,但是当它返回时,它仍然在循环中,无论如何将不会进一步检查。 如果你在调用递归函数之前检查了转向的值,它可能会更好(这样你也可以摆脱GoTo)。

+0

完美,谢谢。 – Jackdaw 2014-08-30 11:03:30

0

为什么不只是把你没有Goto Endline的地方返回?就我所知,返回函数会停止函数执行。这将摆脱可怕的Goto命令(它会导致混乱的代码和不可思议的错误)。

+0

我认为除非没有其他选择,否则不会使用GoTos来分解事物。摆脱它,谢谢。 – Jackdaw 2014-09-01 09:23:25