小弟用vs2008实现的银行家算法(vb),BUG无数,急求高人指正

如题,花费几天时间写的源码,勉强执行,BUG无数,急求高人指正源码:
Option Strict Off
Option Explicit On
Friend Class FORM1

End Class
Inherits System.Windows.Forms.Form
Private Sub Command1_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles Command1.Click
'以下操作定义矩阵
Dim Max(4, 3) As Short
Dim Available(3) As Short
Dim Allocation(4, 3) As Short
Dim Need(4, 3) As Short
Dim Request(4, 3) As Short
'安全性算法所需数据结构
Dim Work(3) As Short
Dim Finish(4) As Boolean
'设置错误入口
keyword="A9E4979A-37FA-4718-9994-97DD76ED70A7"”
Dim iserror_Renamed As Boolean
'定义临时分配向量
Dim temp(4) As Short
'设置正式分配向量
Dim row(4) As Short
'用-1填满ROW
Dim KK As Short
For KK = 0 To 4
row(KK) = -1
Next
'将数值放入矩阵
Dim i As Short
Dim j As Short
For i = 0 To 4
For j = 0 To 3
On Error GoTo error4
Allocation(i, j) = Int(CDbl(A(4 * i + j).Text))
Need(i, j) = Int(CDbl(N(4 * i + j).Text)
Request(i, j) = Int(CDbl(N((39 - 4 * i) - j).Text))
Available(j) = Int(CDbl(AV(j).Text))
Work(j) = Available(j)
Next
Next
'银行家算法《1》
1:
Dim errorcode1 As Short
Dim errorcode2 As Short '定义错误参数
Dim s As Short
Dim v As Short '计数器
For s = 0 To 4
For v = 0 To 3

If Need(s, v) < Request(s, v) Then
errorcode1 = s
errorcode2 = v
iserror_Renamed = True
Exit For
Exit For
GoTo error1
End If
Next
Next
'银行家算法《2》找到至少一个可以试分配的值
2:
Dim h As Short
Dim k As Short 'counter
Dim okcounter As Short ' 用于判断四种资源是否都满足条件
For h = 0 To 4
For k = 0 To 3
If Request(h, k) <= Available(k) Then
Select Case okcounter ' 判断计数值
Case 3 '如果全都正确
GoTo 3
Case Else
okcounter = okcounter + 1
End Select
Else
okcounter = 0
Exit For
End If
Next
Next

If h = 5 Then '是否能找到
iserror_Renamed = True
GoTo error2
End If
'因百度长度限制,第一部分结束,其余部分见下文
运行界面:

'银行家算法《3》试分配
3:

temp(0) = h
Dim m As Short 'counter
For m = 0 To 3
Available(m) = Available(m) - Request(h, m)
Allocation(h, m) = Allocation(h, m) + Request(h, m)
Need(h, m) = Need(h, m) - Request(h, m)
Next

'安全性算法《1》

A1:

'安全性算法《2》 找到一个四个资源均满足NEED<=AVAILABLE的进程 outputprocess
Dim c, d, loopcounter As Short
Dim outputprocess As Short
Dim iscorrect(4, 3) As Boolean '判断是否4个资源均满足NEED<=AVAILABLE
Dim canbefound As Boolean
'判断是否可能找到
Dim backcount As Short '为返回查找计数
backcount = 0

A2:

'以下代码用于查找出一个满足题设条件的进程

backcount = backcount + 1
For loopcounter = 0 To 4

For c = 0 To 4
For d = 0 To 3
If Need(c, d) <= Available(d) And Finish(c) = False Then
iscorrect(c, d) = True
If iscorrect(c, 0) And iscorrect(c, 1) And iscorrect(c, 2) And iscorrect(c, 3) = True Then
'四个均满足NEED<=AVAILABLE
outputprocess = c
canbefound = True '本次可以找出一个进程
GoTo A3
End If
Else
iscorrect(c, d) = False
End If
Next
Next

Next

If canbefound = False Then
iserror_Renamed = True
GoTo error3

End If

'安全性算法《3》 考察运行2中所给进程后,是否安全

Dim p As Short 'counter
A3:
'运行进程

For p = 0 To 3
Available(p) = Available(p) + Allocation(outputprocess, p)
Next
Select Case backcount
Case Is > 5
'循环已经做完,判断是否找到
If canbefound = False Then
iserror_Renamed = True
GoTo error3
Else
GoTo A4
End If
Case Else
row(backcount - 1) = outputprocess
End Select

Finish(outputprocess) = True

If Finish(0) And Finish(1) And Finish(2) And Finish(3) And Finish(4) = True Then
'存在安全序列,准备打印
GoTo A4

Else
GoTo A2
End If
'错误处理

Select Case iserror_Renamed
Case True
error1:

MsgBox("进程P" & errorcode1 & "对第" & errorcode2 & "号资源访问非法!")
Exit Sub
error2:
MsgBox("对不起,找不到安全序列!!")
Exit Sub
error3:
MsgBox("很遗憾队首P" & temp(0) & "的请求不能满足,进程挂起")
Exit Sub

Case False
'安全性算法《4》
A4:
Dim outputs As Short
For outputs = 0 To 4
MsgBox("恭喜,已找到安全序列,第" & outputs + 1 & "项为:P" & row(outputs))
Next
End Select
Exit Sub
error4:
MsgBox("数值不能为空!!")
End Sub
Private Sub FORM1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
MsgBox("程序作者:蔡政 QQ36553114,bye bye")
End Sub
end class
温馨提示:答案为网友推荐,仅供参考
相似回答