繁体   English   中英

VB.net 表达式不产生值错误

[英]VB.net Expression does not produce a value error

我是 vb.net 的新手,一般编程很抱歉,如果这是一个基本错误,但我试图在 vb.net 中制作 ax 和 o 的游戏,它一直说我的 CheckForWin 不会产生一个对我来说意义为零的值,当我查了一下,唯一的问题是关于将不同的代码转换为 vb.net 并且没有提到我遇到的问题这是我的代码:Public Class Form1

Dim Board(9) As String
Dim Player1 As String = "X"
Dim Player2 As String = "O"

Public Property X As String

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

End Sub

Private Sub ResetBoard()
    Do
        If CheckForWin() = True Then
            Board(0) = 0
            Board(1) = 0
            Board(2) = 0
            Board(3) = 0
            Board(4) = 0
            Board(5) = 0
            Board(6) = 0
            Board(7) = 0
            Board(8) = 0

        End If
    Loop Until Board(0) = 0
    Board(1) = 0
    Board(2) = 0
    Board(3) = 0
    Board(4) = 0
    Board(5) = 0
    Board(6) = 0
    Board(7) = 0
    Board(8) = 0
End Sub

Private Sub CheckForWin()
    If "0""3""6" = X Then
        ResetBoard()
    ElseIf "1""4""7" = X Then
        ResetBoard()
    ElseIf "2""5""8" = X Then
        ResetBoard()
    ElseIf "0""1""2" = X Then
        ResetBoard()
    ElseIf "3""4""5" = X Then
        ResetBoard()
    ElseIf "6""7""8" = X Then
        ResetBoard()
    ElseIf "0""4""8" = X Then
        ResetBoard()
    ElseIf "2""4""6" = X Then
        ResetBoard()
    ElseIf "0""3""6" = 0 Then
        ResetBoard()
    ElseIf "1""4""7" = 0 Then
        ResetBoard()
    ElseIf "2""5""8" = 0 Then
        ResetBoard()
    ElseIf "0""1""2" = 0 Then
        ResetBoard()
    ElseIf "3""4""5" = 0 Then
        ResetBoard()
    ElseIf "6""7""8" = 0 Then
        ResetBoard()
    ElseIf "0""4""8" = 0 Then
        ResetBoard()
    ElseIf "2""4""6" = 0 Then
        ResetBoard()
    End If
End Sub

End Class

问题出在这行代码中: If CheckForWin() = True Then

这行代码:

If CheckForWin() = True Then
    ...
End If

这将设置条件检查以查看CheckForWin方法的结果是否为真。 问题是该方法是一个 Sub 例程,而不是 Function。

Function 表示一个返回值的代码块,而 Sub 也表示一个代码块,但它不返回值。

更重要的是,它看起来好像您陷入了无限循环。 ResetBoard调用CheckForWin ,后者调用ResetBoard ,后者调用...等等。

最简单的做法是:

  1. CheckForWin转换为 Function
  2. 停止在CheckForWin方法中调用ResetBoard
  3. ResetBoard方法中的任何条件检查为 True 时返回 True

这是一个例子:

Private Sub ResetBoard()
    ' check if there is a winner, if not then stop execution of the method early
    Dim isWin = CheckForWin()
    If (Not isWin) Then
        Return
    End If

    For index = 1 To 8
        Board(index) = 0
    Next
End Sub

Private Function CheckForWin() As Boolean
    Dim winningPatterns = {
        "0""3""6",
        "1""4""7",
        "2""5""8",
        ' etc...
    }
    Dim doAnyMatch = winningPatterns.Contains(X)
    Return doAnyMatch
End Function

问题未解决?试试以下方法:

VB.net 表达式不产生值错误

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2023 STACKOOM.COM