Sorry für die eigenartige überschrift aber mir ist nichts besseres eingefallen.
Also hier mein Problem:
Ich muss fürs Studium ein Programm schreiben mit einer Klasse und 3 Methoden in der Klasse
Die drei methoden heißen store(), search() und delete() und die methoden sollen folgendes leisten; store() kriegt einen string übergeben, berechnet einen hashwert aus dem string und speichert den String in einem Stringarray an der stelle des hashwertes, seach() kriegt einen string übergeben und sucht ob der string im array vorhanden ist und delete() kriegt ebenfalls einen string übergeben und löscht diesen aus dem array.
Und die main funktion soll so eine art menü habe, wodurch ich die methoden aufrufen kann.
Soweit habe ich auch alles, nur kriege ich falsche werte durch die methoden, wenn ich das "menü" benutze.
Hier mal der code:
Wenn ich durch die switch case anweisung den String "test" druch store() speichere und dann durch search() suche, gibt er mir -1 aus (-1 soll ausgegeben werden falls der string nicht im array vorhanden ist)
Wenn ich es jedoch durch code zeilen mache z.B so:
Kriege ich die richtigen ausgaben raus. Kann mir jemand sagen wo mein fehler ist?
Also hier mein Problem:
Ich muss fürs Studium ein Programm schreiben mit einer Klasse und 3 Methoden in der Klasse
Die drei methoden heißen store(), search() und delete() und die methoden sollen folgendes leisten; store() kriegt einen string übergeben, berechnet einen hashwert aus dem string und speichert den String in einem Stringarray an der stelle des hashwertes, seach() kriegt einen string übergeben und sucht ob der string im array vorhanden ist und delete() kriegt ebenfalls einen string übergeben und löscht diesen aus dem array.
Und die main funktion soll so eine art menü habe, wodurch ich die methoden aufrufen kann.
Soweit habe ich auch alles, nur kriege ich falsche werte durch die methoden, wenn ich das "menü" benutze.
Hier mal der code:
Java:
import java.io.*;
public class pp422
{
static class hashtabelle
{
private String array[];
hashtabelle(int arraygröße) //Konstruktor
{
array = new String[arraygröße];
}
boolean store(String a)
{
int hash = 3;
boolean frei;
int m = array.length;
for (int i = 0; i < a.length(); i++) //Berechnet den hashwert
{ //
hash = (hash + a.charAt(i))%m; //
} //
if (array[hash] == null) //Prüfen ob die stelle im array leer ist
{
frei = true;
}
else
{
frei = false;
}
if (frei == true)
{
array[hash] = a;
return true;
}
else
{
return false;
}
}
int search(String a)
{
for (int i = 0; i < array.length; i++)
{
if (array[i] == a)
{
return i;
} // end of if
}
return -1;
}
void delete(String a)
{
for (int i = 0; i < array.length; i++ )
{
if (array[i] == a)
{
array[i] = null;
} // end of if
} // end of for
}
}
public static void main(String[] args) throws IOException
{
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader in = new BufferedReader(isr);
int wahl, a = 1;
String wort;
hashtabelle h = new hashtabelle(8);
do{
System.out.println("Welche methode möchten sie benutzen?");
System.out.println("1 - store()");
System.out.println("2 - search()");
System.out.println("3 - delete()");
wahl = Integer.parseInt(in.readLine());
while (wahl < 0 || wahl > 3) {
System.out.println("Wählen sie eine der drei funktionen aus");
wahl = Integer.parseInt(in.readLine());
} // end of while
switch (wahl)
{
case 1 : //System.out.println("Geben sie einen String zum SPEICHERN ein");
wort = in.readLine();
System.out.println(h.store(wort));
System.out.println();
wort = null;
break;
case 2 : //System.out.println("Geben sie einen String zum SUCHEN ein");
wort = in.readLine();
System.out.println(h.search(wort));
System.out.println();
wort = null;
break;
case 3 : //System.out.println("Geben sie einen String zum LÖSCHEN ein");
wort = in.readLine();
h.delete(wort);
wort = null;
break;
} // end of switch
}while(a > 0);
}
}
Wenn ich durch die switch case anweisung den String "test" druch store() speichere und dann durch search() suche, gibt er mir -1 aus (-1 soll ausgegeben werden falls der string nicht im array vorhanden ist)
Wenn ich es jedoch durch code zeilen mache z.B so:
Java:
System.out.println(h.store("test")); //true
System.out.println(h.search("test")); //3
System.out.println(h.store("test")); //false
h.delete("test");
System.out.println(h.search("test")); //-1
Kriege ich die richtigen ausgaben raus. Kann mir jemand sagen wo mein fehler ist?