Klassen Problem bei switch-case?

Daora

Mitglied
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:
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?
 
Normalerweise funktioniert der Vergleich von Strings mittels == nicht wie gewünscht, sondern man verwendet equals. Dass es mit den Literalen doch funktioniert, liegt vermutlich an einer Besonderheit, für die es unter dem Stichwort "string interning" bestimmt jede Menge Erklärungen gibt.

Ich glaube aber nicht, dass es bei der search- und delete-Methode so gedacht ist, das gesamte Array zu durchsuchen. Es soll bestimmt wie bei der store-Methode die korrekte Array-Position aus dem übergebenen String berechnet werden.
 
Vielen dank mit equals hat es funktioniert 🙂

Ich glaube aber nicht, dass es bei der search- und delete-Methode so gedacht ist, das gesamte Array zu durchsuchen. Es soll bestimmt wie bei der store-Methode die korrekte Array-Position aus dem übergebenen String berechnet werden.
Ist denke ich uns überlassen wie wir das lösen. Die aufgabenstellung ist nicht ganz klar dabei. Deine methode ist jedoch die effizientere.
 

Neue Themen


Zurück
Oben