2

vb.netでダブルハッシュハッシュテーブルを作成しようとしていますが、解決方法がわからないエラーがいくつか発生しています。うまくいけば、皆さんが私を助けてくれます。私が抱えている問題は、私が dbnull.value または mod= を持っているところならどこでもあります。エディターでエラーが発生し、それらを修正する方法がわかりません。このコードをvbに入れて、私が何を意味するかを確認してください。コードは次のとおりです。

Public Class DoubleHashing

Class DataItem
    Private data As Integer

    Public Sub New(ByVal i As Integer)
        data = i
    End Sub
    Public Function getKey() As Integer
        Return data
    End Function

End Class

Private hashArray() As DataItem
Private arraySize As Integer
Private bufItem As DataItem

Public Sub New(ByVal size As Integer)

    arraySize = size
    hashArray(arraySize) = New DataItem(arraySize)
    Dim bufItem(-1) As DataItem
End Sub

Public Function hashFunc1(ByVal key As Integer) As Integer
    Return key Mod arraySize
End Function

Public Function hashFunc2(ByVal key As Integer) As Integer
    Return 6 - key Mod 6
End Function


Public Sub insert(ByVal key As Integer, ByVal item As DataItem)
    Dim hashVal As Integer = hashFunc1(key) ' hash the key
    Dim stepSize As Integer = hashFunc2(key) ' get step size

    ' until empty cell or -1
    While hashArray(hashVal) <> DBNull.Value & hashArray(hashVal).getKey() <> -1
        hashVal += stepSize ' add the step
        hashVal mod= arraySize ' for wraparound
    End While
    hashArray(hashVal) = item ' insert item

End Sub

Public Function delete(ByVal key As Integer) As DataItem
    Dim hashVal As Integer = hashFunc1(key)
    Dim stepSize As Integer = hashFunc2(key) ' get step size

    While hashArray(hashVal) <> DBNull.Value
        If hashArray(hashVal).getKey() = key Then
            Dim temp As DataItem = hashArray(hashVal) ' save item
            hashArray(hashVal) = bufItem '  delete item
            Return temp '  return item
        End If

        hashVal += stepSize ' add the step
        hashVal mod= arraySize '  for wraparound
    End While

    Return DBNull.Value
End Function

Public Function find(ByVal key As Integer) As DataItem
    Dim hashVal As Integer = hashFunc1(key)
    Dim stepSize As Integer = hashFunc2(key)

    While hashArray(hashVal) <> DBNull.Value
        If hashArray(hashVal).getKey() = key Then
            Return hashArray(hashVal)
        End If

        hashVal += stepSize
        hashVal mod= arraySize
    End While

    Return DBNull.Value
End Function

クラス終了

4

1 に答える 1

0

通常、2 番目のハッシュ関数は 0 を返してはなりません。

DBNull.Value が DataItem から継承されているとは思いません。また、配列は Nothing への参照を含むサイズの配列に初期化されます。

于 2011-02-27T03:59:44.223 に答える