Hallo ,
ich bin gerade am Verzweifeln, habe mir eine eigene Hashtabelle gebaut und möchte nun diese als Array meines selbst erstellten Datentyps "Entry" laufen lassen, also:
Entry[] hashtabelle = new Entry[n];
wobei n die vom Nutzer bestimmte Hashtabellengröße sein soll. Nur leider klappt diese Initialisierung anscheinend nicht, da ich zur Laufzeit eine NullPointerException um die Ohren geworfen krieg, sofern ich nur aufs Array zugreifen will.
z. B. dann:
hash[0].set_wert(3); --> NullPointerException
Mein Quellcode sieht folgendermaßen aus:
Ach ja evtl. logische Fehler bei der insert() oder contains() Funktion (die delete z.B. fehlt komplett) sind erstmal egal, ich habe dahingehend noch nix kontrolliert, ob das so richtig ist, ich "lerne" ja noch den Datentyp des Hashs kennen. -- Mir geht es erstmal nur um die Exception
Das ist der Entry:
Und das ist die Hashtabelle,
und hier ist die main(), die ich mal testweise geschrieben habe.
Ich hoffe jemand kann mir helfen, ich sitze schon stundenlang und finde das Problem einfach nicht.
ich bin gerade am Verzweifeln, habe mir eine eigene Hashtabelle gebaut und möchte nun diese als Array meines selbst erstellten Datentyps "Entry" laufen lassen, also:
Entry[] hashtabelle = new Entry[n];
wobei n die vom Nutzer bestimmte Hashtabellengröße sein soll. Nur leider klappt diese Initialisierung anscheinend nicht, da ich zur Laufzeit eine NullPointerException um die Ohren geworfen krieg, sofern ich nur aufs Array zugreifen will.
z. B. dann:
hash[0].set_wert(3); --> NullPointerException
Mein Quellcode sieht folgendermaßen aus:
Ach ja evtl. logische Fehler bei der insert() oder contains() Funktion (die delete z.B. fehlt komplett) sind erstmal egal, ich habe dahingehend noch nix kontrolliert, ob das so richtig ist, ich "lerne" ja noch den Datentyp des Hashs kennen. -- Mir geht es erstmal nur um die Exception
Das ist der Entry:
Java:
public class Entry{
private int wert;
private char flag;
public Entry(){
flag = 'f';
}
public int get_wert(){
return wert;
}
public void set_wert(int x){
wert = x;
}
public char get_flag(){
return flag;
}
public void set_flag(char x){
flag = x;
}
}
Und das ist die Hashtabelle,
Java:
class Hash{
private int n = 0;
private int m; //Groesse des Hash-Arrays
private Entry[] hash;
public void create_hash(int x){
m = x;
hash = new Entry[m];
}
public float get_loadFactor(){
return (n/m);
}
public boolean contains(int x){
int index = x%m;
int i = 0;
while(true){
if(hash[index].get_wert() == x){
return true;
}
if(hash[index].get_wert() != x || hash[index].get_flag() == 'g'){
i++;
index = index + i;
}
if(hash[index].get_flag() == 'f'){
return false;
}
}
}
public void insert(int x){
int index = x%m;
int i = 0;
while(true){
if(hash[index].get_flag() == 'f' || hash[index].get_flag() == 'g'){
hash[index].set_wert(x);
hash[index].set_flag('b');
break;
}
else{
i++;
index = index + i;
}
}
}
public void ausgabe(){
for(int i = 0; i < m; i++){
if(hash[i].get_flag() == 'f'){
System.out.println("Wert: |/|" + "\t");
System.out.println("Flag: b" + "\t");
}
if(hash[i].get_flag() == 'g'){
System.out.println("Wert: |/|" + "\t");
System.out.println("Flag: g" + "\t");
}
if(hash[i].get_flag() == 'b'){
System.out.println("Wert = " + hash[i].get_wert() + "\t");
System.out.println("Flag: b" + "\t");
}
}
}
} //Ende Klasse}
und hier ist die main(), die ich mal testweise geschrieben habe.
Java:
public class Hash_main {
public static void main(String[] args) {
Hash hash = new Hash();
hash.create_hash(100);
hash.insert(5); //--> hier passiert schon die NullPointerException, warum?
hash.insert(82);
hash.insert(12);
hash.ausgabe();
}
}
Ich hoffe jemand kann mir helfen, ich sitze schon stundenlang und finde das Problem einfach nicht.