Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
获取错误&x27;比较';不是';石头剪刀,武器和#x27;在VB.NET中_Vb.net_Winforms_Oop_Compareto - Fatal编程技术网

获取错误&x27;比较';不是';石头剪刀,武器和#x27;在VB.NET中

获取错误&x27;比较';不是';石头剪刀,武器和#x27;在VB.NET中,vb.net,winforms,oop,compareto,Vb.net,Winforms,Oop,Compareto,我是编程和面向对象编程的新手,所以请原谅我缺乏知识 作为我的石头、布和剪刀游戏的一部分,我有一个抽象的超类(武器),它在VB.NET中有子类(石头、布和剪刀): Public MustInherit Class Weapons Public Class Paper Inherits Weapons Public Function compareTo(ByVal Weapons As Object) As Integer

我是编程和面向对象编程的新手,所以请原谅我缺乏知识

作为我的石头、布和剪刀游戏的一部分,我有一个抽象的超类(武器),它在VB.NET中有子类(石头、布和剪刀):

    Public MustInherit Class Weapons

    Public Class Paper
        Inherits Weapons

        Public Function compareTo(ByVal Weapons As Object) As Integer
            If TypeOf Weapons Is Paper Then
                Return 0
            ElseIf TypeOf Weapons Is Rock Then
                Return 1
            Else
                Return -1
            End If
        End Function
    End Class

    Public Class Rock
        Inherits Weapons

        Public Function compareTo(ByVal Weapons As Object) As Integer
            If TypeOf Weapons Is Rock Then
                Return 0
            ElseIf TypeOf Weapons Is Scissors Then
                Return 1
            Else
                Return -1
            End If
        End Function
    End Class

    Public Class Scissors
        Inherits Weapons

        Public Function compareTo(ByVal Weapons As Object) As Integer
            If TypeOf Weapons Is Scissors Then
                Return 0
            ElseIf TypeOf Weapons Is Paper Then
                Return 1
            Else
                Return -1
            End If
        End Function
    End Class

End Class
还有一个超类Player,它有子类(PlayerComputerRandomPlayerHumanPlayer),如:

但是,在单击btnRock后尝试比较结果时,我发现错误“compareTo”不是“RockPaperScissors.Wearms”的成员。代码是:

    Public Class GameForm

    Private Sub btnRock_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRock.Click
        Dim player1 = New PlayerHumanPlayer()
        Dim player2 = New PlayerComputerRandom()

        player1.Name = "HumanPlayer"
        player1.pickWeapon("Rock")

        player2.Name = "Computer"
        player2.pickWeapon()

        Dim winner As Integer = player1.getWeapon().compareTo(player2.getWeapon())

        Select Case winner
            Case 1
                Console.WriteLine(player1.Name() + " wins!")
            Case -1
                Console.WriteLine(player2.Name() + " wins!")
            Case 0
                Console.WriteLine("Draw!")
        End Select

    End Sub
End Class
行“Dim winner As Integer=player1.getwearm().compareTo(player2.getwearm())”似乎是导致问题的原因

你知道我该如何排序,以确保返回正确的优胜者结果吗?任何帮助都将不胜感激


许多人提前感谢

如果你想调用“compareTo”,你需要实现
IComparable
接口:

问题是你试图创建一个基类,这个基类需要有一个compareTo函数来继承,但没有完成声明。应该是这样的

Public MustInherit Class Weapons
    Public MustOverride Function compareTo(Weapons As Object) As Integer
End Class
这将改变你的武器等级

Public Class Paper
    Inherits Weapons

    Public Overrides Function compareTo(ByVal Weapons As Object) As Integer
        If TypeOf Weapons Is Paper Then
            Return 0
        ElseIf TypeOf Weapons Is Rock Then
            Return 1
        Else
            Return -1
        End If
    End Function
End Class

Public Class Rock
    Inherits Weapons

    Public Overrides Function compareTo(ByVal Weapons As Object) As Integer
        If TypeOf Weapons Is Rock Then
            Return 0
        ElseIf TypeOf Weapons Is Scissors Then
            Return 1
        Else
            Return -1
        End If
    End Function
End Class

Public Class Scissors
    Inherits Weapons

    Public Overrides Function compareTo(ByVal Weapons As Object) As Integer
        If TypeOf Weapons Is Scissors Then
            Return 0
        ElseIf TypeOf Weapons Is Paper Then
            Return 1
        Else
            Return -1
        End If
    End Function
End Class

请参阅

上的此MSDN链接,感谢您的及时回复。我需要更改代码的哪一部分以及如何更改?我为缺乏编码技能而道歉,我的编程能力不是最好的。没问题。我没有时间写完整的解释,所以我想我应该给点提示@马克·霍尔能够填写细节:)非常感谢,这就解决了问题!只是一个一般性的建议,您是否建议将所有类(如武器基类和子类(石头、布和剪刀)放在file.vb文件中或单独放在一个class.vb文件中?您可以将它们放在一个class.vb文件中。没关系。如果类开始变大,我会将它们移动到一个单独的文件中。
Public Class Paper
    Inherits Weapons

    Public Overrides Function compareTo(ByVal Weapons As Object) As Integer
        If TypeOf Weapons Is Paper Then
            Return 0
        ElseIf TypeOf Weapons Is Rock Then
            Return 1
        Else
            Return -1
        End If
    End Function
End Class

Public Class Rock
    Inherits Weapons

    Public Overrides Function compareTo(ByVal Weapons As Object) As Integer
        If TypeOf Weapons Is Rock Then
            Return 0
        ElseIf TypeOf Weapons Is Scissors Then
            Return 1
        Else
            Return -1
        End If
    End Function
End Class

Public Class Scissors
    Inherits Weapons

    Public Overrides Function compareTo(ByVal Weapons As Object) As Integer
        If TypeOf Weapons Is Scissors Then
            Return 0
        ElseIf TypeOf Weapons Is Paper Then
            Return 1
        Else
            Return -1
        End If
    End Function
End Class