2011-02-27 5 views
2

Im essayant de créer une double hashtable de hachage dans vb.net et j'obtiens quelques erreur que je ne sais pas comment résoudre. Espérons que vous pouvez m'aider. Les problèmes que j'ai sont n'importe où j'ai dbnull.value ou mod = i obtenir des erreurs dans l'éditeur et je ne sais pas comment les réparer. mettre ce code en vb pour voir ce que je veux dire. voici le code:double hashtable ou hachage double hashtable dans vb.net

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 

End Class

+0

Alors, quelle est votre question? – Gabe

+0

Je reçois une erreur de syntaxe avec dbnull.value et des lignes comme ceci hashVal mod = arraySize et je ne connais pas d'autres valeurs pour null dans vb – bob

+0

nvm sur le mod = stuff. – bob

Répondre

0

Normalement, la deuxième fonction de hachage ne doit jamais revenir 0.

Je ne pense pas DBNull.Value hérite de DataItem. En outre, votre tableau est initialisé à un tableau de taille contenant des références à Nothing.

+0

qui ne répond pas à ma question – bob

+0

Vous pourriez essayer d'élaborer sur votre question. C'est suffisant pour que cela ne marche pas mais il pourrait bien y en avoir plus. – Joshua

+0

mettre en vb et voir l'erreur im obtenir son difficile à expliquer – bob