获取错误&x27;比较';不是';石头剪刀,武器和#x27;在VB.NET中
我是编程和面向对象编程的新手,所以请原谅我缺乏知识 作为我的石头、布和剪刀游戏的一部分,我有一个抽象的超类(武器),它在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
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,它有子类(PlayerComputerRandom和PlayerHumanPlayer),如:
但是,在单击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