Hallo zusammen,
ich bearbeite gerade ein Programm, dass zu ungefähr 80% fertig ist. Jetzt geht es nur noch um Fehlerbearbeitung und Ausgabe eines Hashtables:
Die Aufgabe:
. Hashtabelle
Früher haben Sie sich mit einer Hash-Funktion für Strings beschäftigt. Schreiben Sie jetzt eine Klasse für Speicherobjekte(„Hash-Tabellen“),die die Funk-
tion benutzt, um Strings abzulegen und zu suchen. Objekte sollen die folgenden Komponenten haben:
Attribut (von außen nicht direkt zugreifbar):
•EinString-Array zur Speicherung von Wörtern.
• Konstruktor:
• Ein Konstruktor, der als Parameter die gewünschte Größe des Arraysenthält (und den Ar-
ray entsprechend erzeugt).
• Methoden:
•Eine Methode store(), die einen zu speichernden String als Parameter übergeben be-
kommt. Die Methode soll anhand der Hash-Funktion aus dem Arbeitsblatt „Methoden
und Arrays“den Hash-Wert dieses Stringsberechnen (wobei als Modulo m die Länge
des Arrays benutzt werden muss). Der Hash-Wert gibt die Position im Array an, an der
der übergebene String gespeichert werden soll. Ist die Position frei, so soll der String
dort abgelegt undein true zurückgeliefert werden. Ist die Position nicht frei (also im
Fall einer „Kollision“) soll er nicht gespeichert und ein false
zurückgeliefert werden.
• Eine Methode search(), die einen String übergeben bekommt. Befindet sich der String im Speicher, so soll seine Position zurückgeliefert werden, ansonsten der Wert -1.
• Eine Methode delete() , die einen String übergeben be kommt und diesen String löscht,
sofern er sich im Speicher befindet. Sie soll nichts zurückliefern.
Schreiben Sie zudem ein Hauptprogramm, das eine Hash-Tabelle erzeugt und dann ein Auswahlmenü bietet, mit dem man wiederholt ihre verschiedenen Methoden aufrufen kan
n.
Mein Code sieht so aus:
Das Programm lässt sich programmieren und ausführen, jedoch macht die Methode store Probleme. Wenn ich zweimal den gleichen String übergebe, müsste die Rückmeldung kommen, dass er nicht gespeichert werden kann da die Position bereits belegt ist. Es wird allerdings immer "Speichern erfolgreich" ausgegeben.
Das Hauptprogramm soll eine Hashtabelle erstellen. Wie gebe ich diese aus? Ich gebe zu, dass die Beispiele im Internet mich eher verwirrt als geholfen haben.
Ich wäre wirklich dankbar, wenn ihr mir ein wenig unter die Arme greifen könntet.
Besten Dank.
ich bearbeite gerade ein Programm, dass zu ungefähr 80% fertig ist. Jetzt geht es nur noch um Fehlerbearbeitung und Ausgabe eines Hashtables:
Die Aufgabe:
. Hashtabelle
Früher haben Sie sich mit einer Hash-Funktion für Strings beschäftigt. Schreiben Sie jetzt eine Klasse für Speicherobjekte(„Hash-Tabellen“),die die Funk-
tion benutzt, um Strings abzulegen und zu suchen. Objekte sollen die folgenden Komponenten haben:
Attribut (von außen nicht direkt zugreifbar):
•EinString-Array zur Speicherung von Wörtern.
• Konstruktor:
• Ein Konstruktor, der als Parameter die gewünschte Größe des Arraysenthält (und den Ar-
ray entsprechend erzeugt).
• Methoden:
•Eine Methode store(), die einen zu speichernden String als Parameter übergeben be-
kommt. Die Methode soll anhand der Hash-Funktion aus dem Arbeitsblatt „Methoden
und Arrays“den Hash-Wert dieses Stringsberechnen (wobei als Modulo m die Länge
des Arrays benutzt werden muss). Der Hash-Wert gibt die Position im Array an, an der
der übergebene String gespeichert werden soll. Ist die Position frei, so soll der String
dort abgelegt undein true zurückgeliefert werden. Ist die Position nicht frei (also im
Fall einer „Kollision“) soll er nicht gespeichert und ein false
zurückgeliefert werden.
• Eine Methode search(), die einen String übergeben bekommt. Befindet sich der String im Speicher, so soll seine Position zurückgeliefert werden, ansonsten der Wert -1.
• Eine Methode delete() , die einen String übergeben be kommt und diesen String löscht,
sofern er sich im Speicher befindet. Sie soll nichts zurückliefern.
Schreiben Sie zudem ein Hauptprogramm, das eine Hash-Tabelle erzeugt und dann ein Auswahlmenü bietet, mit dem man wiederholt ihre verschiedenen Methoden aufrufen kan
n.
Mein Code sieht so aus:
Java:
import java.io.*;
public class Hashneu {
public static void main (String [ ] args ) throws IOException {
boolean neustart = true;
Hashneu meinHash;
BufferedReader in= new BufferedReader(new InputStreamReader(System.in));
System.out.println("Bitte geben Sie die Groesse des Arrays ein:");
int size= Integer.parseInt(in.readLine());
meinHash = new Hashneu(size);
while (neustart) {
System.out.println("Bitte geben Sie den zu �bergenden String ein:");
String s1 = in.readLine();
System.out.println("Welche Methode m�chten Sie verwenden?");
System.out.println("1. Store?");
System.out.println("2. Search?");
System.out.println("3. Delete?");
System.out.println("Bitte geben Sie die entsprechende Zahl ein:");
int Auswahl = Integer.parseInt(in.readLine());
if (Auswahl==1){ // Store
boolean gespeichert = meinHash.Store(s1);
if (gespeichert = true){
System.out.println("Speichern erfolgreich");}
else System.out.println("Position bereits belegt.");
}
else if (Auswahl ==2){ //Search
int Stringposition = meinHash.search(s1);
if (Stringposition == -1){
System.out.println("String nicht im Array enthalten");}
else {System.out.println("Position des Strings: " + Stringposition);
}
}
else if (Auswahl ==3){ //Delete
meinHash.delete(s1);
}
}
System.out.println("M�chten Sie das Programm erneut starten? (j/n)");
String sc2 = in.readLine();
neustart = sc2.equalsIgnoreCase("j");
}
//------------------------------------------------------------------------------------------
private String [ ] Array;
Hashneu(int size){
Array = new String [size];
}
boolean Store(String s1)
{
int summe = 0;
int Hash=0;
for (int i = 0; i < s1.length(); i++) {
summe += s1.charAt(i);
Hash = summe%(Array.length);
}
if (Array[Hash]!=null) {
Array[Hash]= s1;
return false;
}else
{Array[Hash]= s1;
return true;
}
}
public int search(String s1){
for (int i =0; i<Array.length; i++) {
if (s1.equals(Array[i])) {
return i;}
}
return -1;
}
void delete(String s1){
for (int i =0; i<Array.length; i++) {
if (s1.equals(Array[i])) {
Array[i]=null;
}
}
}
}
Das Programm lässt sich programmieren und ausführen, jedoch macht die Methode store Probleme. Wenn ich zweimal den gleichen String übergebe, müsste die Rückmeldung kommen, dass er nicht gespeichert werden kann da die Position bereits belegt ist. Es wird allerdings immer "Speichern erfolgreich" ausgegeben.
Das Hauptprogramm soll eine Hashtabelle erstellen. Wie gebe ich diese aus? Ich gebe zu, dass die Beispiele im Internet mich eher verwirrt als geholfen haben.
Ich wäre wirklich dankbar, wenn ihr mir ein wenig unter die Arme greifen könntet.
Besten Dank.