(接上页)
Straight Seeding类
在这个小程序在实际应用当中,会发现大部分工作在Straight Seeding类中完成的。我们实例化StraightSeeding 类,复制、修改游泳运动员的集合和所属泳道位置。
Public Class StraightSeeding
Inherits Seeding
Public Overrides Sub seed()
Dim lastHeat As Integer
Dim lastlanes As Integer
Dim i, j, count, heats As Integer
Dim swmr As Swimmer
Try
sw = sort(sw)
laneOrder = calcLaneOrder(numLanes)
count = sw.Count
lastHeat = count Mod numLanes
If (lastHeat < 3) And lastHeat > 0 Then
lastHeat = 3 'last heat must have 3 or more
End If
count = sw.Count
lastlanes = count - lastHeat
numheats = lastlanes \ numLanes
If (lastHeat > 0) Then
numheats = numheats + 1
End If
heats = numheats
'place heat and lane in each swimmer's object
j = 0
For i = 0 To lastlanes - 1
swmr = sw.swm(i)
swmr.setLane(CType(laneOrder(j), Integer))
j = j + 1
swmr.setHeat(heats)
If (j >= numLanes) Then
heats = heats - 1
j = 0
End If
Next i
'Add in last partial heat
If (lastHeat > 0) Then
If j > 0 Then
heats = heats - 1
End If
j = 0
For i = lastlanes To count - 1
swmr = CType(sw(i), Swimmer)
swmr.setLane(CType(laneOrder(j), Integer))
j = j + 1
swmr.setHeat(heats)
Next i
End If
Catch e As Exception
Console.WriteLine(i.ToString + j.ToString + e.ToString)
Console.WriteLine(e.StackTrace)
End Try
End Sub
'-----
Public Sub New(ByVal swmrs As Swimmers, ByVal lanes As Integer)
MyBase.new(swmrs, lanes)
End Sub
End Class
当调用getSwimmers方法时,StraightSeeding 类将创建被选拔的游泳运动员数组。
Circle Seeding类
CircleSeeding 类是从StraightSeeding 类派生的。
Public Class CircleSeeding
Inherits StraightSeeding
Private circlesd As Integer
'-----
Public Sub New(ByVal swmrs As Swimmers, ByVal lanes As Integer)
MyBase.New(swmrs, lanes)
End Sub
'-----
Public Overrides Sub seed()
Dim i, j, k, numHeats As Integer
laneOrder = calcLaneOrder(numLanes)
sw = sort(sw) '排序
MyBase.seed()
numheats = MyBase.getHeats
If (numheats >= 2) Then
If (numheats >= 3) Then
circlesd = 3
Else
circlesd = 2
End If
i = 0
For j = 0 To numLanes - 1
For k = 1 To circlesd
sw.swm(i).setLane(CType(laneOrder(j), Integer))
sw.swm(i).setHeat(numheats - k + 1)
i = i + 1