2012-04-09 13 views
0

eine andere Frage, die da rauskommt. Ich arbeitete an einer Aufgabe, Hash-Funktionen und all den Jazz zu erstellen, und ich bin über ein kleines Problem gestolpert.Zugreifen auf Variable von verschiedenen Methoden (Java)

Line 35:21, where it reads arrpos += prearrpo & ______,

in meinem Kopf funktioniert ... Was im zu tun versuchen, ist der Zugang arr.length vom HashTable() Methode. Ich habe gelesen, Vorschläge mit der Notwendigkeit, ein Objekt der Größe arr.length zu erstellen; aber in meinen Augen scheint dies übermäßig kompliziert -

Gibt es eine andere Möglichkeit, auf die Variable in der HashTable-Methode zuzugreifen, aber innerhalb der Einfügemethode?

Eine andere nicht so wichtige Frage betrifft den riesigen Block von if() Aussagen in der Briefklasse (char c) Klasse; Ich bin mir sicher, dass es einen kürzeren Weg dafür geben muss ... Ich hätte anfangs die ASCII-Werte verwendet; aber die Spezifikationen waren ganz besonders über die Werte mit 1-26 für Groß-/Kleinschreibung Buchstaben-

Dank

import java.io.*; 

public class HashTable { 

    public HashTable() { 
     //Create an array of size 101 
     String arr[] = new String[101]; 
     //System.out.println("Size1: "); 
    } 

    public HashTable(int tsize) { 
     int size = 2 * tsize; 
     //System.out.println("Size: " + size); 
     boolean isPrime = checkPrime(size); 
     //System.out.println("IsPrime: " + isPrime); 
     while (isPrime == false) { 
      //System.out.println("Size: " + size); 
      size++; 
      isPrime = checkPrime(size); 
     } 
     //System.out.println("Size: " + size); 
     String arr[] = new String[size]; 
    } 

    public boolean insert(String line) { 

     String str = line; 
     char[] ch = str.toCharArray(); 
     int slen = str.length(); 
     int arrpos = 0; 
     int hash = slen; 
     for (int i = 0; i < slen; i++) { 
      double prearrpo = letter(ch[i]) * Math.pow(32, (hash - 1)); 
      arrpos += prearrpo % arr.length(); 
      hash--; 

     } 
     System.out.println(arrpos); 
     System.out.println("array size:"); 
     System.out.println(); 
     return false; 

    } 

    private int letter(char c) { 
     char ch = c; 
     if (ch == 'A' || ch == 'a') { 
      return 1; 
     } 
     if (ch == 'B' || ch == 'b') { 
      return 2; 
     } 
     if (ch == 'C' || ch == 'c') { 
      return 3; 
     } 
     if (ch == 'D' || ch == 'd') { 
      return 4; 
     } 
     if (ch == 'E' || ch == 'e') { 
      return 5; 
     } 
     if (ch == 'F' || ch == 'f') { 
      return 6; 
     } 
     if (ch == 'G' || ch == 'g') { 
      return 7; 
     } 
     if (ch == 'H' || ch == 'h') { 
      return 8; 
     } 
     if (ch == 'I' || ch == 'i') { 
      return 9; 
     } 
     if (ch == 'J' || ch == 'j') { 
      return 10; 
     } 
     if (ch == 'K' || ch == 'k') { 
      return 11; 
     } 
     if (ch == 'L' || ch == 'l') { 
      return 12; 
     } 
     if (ch == 'M' || ch == 'm') { 
      return 13; 
     } 
     if (ch == 'N' || ch == 'n') { 
      return 14; 
     } 
     if (ch == 'O' || ch == 'o') { 
      return 15; 
     } 
     if (ch == 'P' || ch == 'p') { 
      return 16; 
     } 
     if (ch == 'Q' || ch == 'q') { 
      return 17; 
     } 
     if (ch == 'R' || ch == 'r') { 
      return 18; 
     } 
     if (ch == 'S' || ch == 's') { 
      return 19; 
     } 
     if (ch == 'T' || ch == 't') { 
      return 20; 
     } 
     if (ch == 'U' || ch == 'u') { 
      return 21; 
     } 
     if (ch == 'V' || ch == 'v') { 
      return 22; 
     } 
     if (ch == 'W' || ch == 'w') { 
      return 23; 
     } 
     if (ch == 'X' || ch == 'x') { 
      return 24; 
     } 
     if (ch == 'Y' || ch == 'y') { 
      return 25; 
     } 
     if (ch == 'Z' || ch == 'z') { 
      return 26; 
     } 
     return 0; 
    } 

    public boolean lookUp(String string) { 
     // 
     return false; 
    } 

    public String getNum() { 
     // 
     return null; 
    } 

    public int length() { 

     return 0; 
    } 

    private static boolean checkPrime(int size) { 

     if (size % 2 == 0) { 
      return false; 
     } 
     double c = Math.sqrt(size); 
     for (int i = 3; i < c; i += 2) { 
      if (size % i == 0) { 
       return false; 
      } 
     } 



     return true; 
    } 
} 
+0

In Bezug auf Ihre 'letter' Methode: http://stackoverflow.com/questions/4262567/convert-letter-to-digits – assylias

+0

@assylisa Danke, dass h Elps viel! – J3210

+1

Eh? Es gibt sogar einfachere Wege. 'return Character.isLetter (ch)? (Character.toUpperCase (ch) - 'A' + 1): 0; 'tut es in einer Zeile. –

Antwort

1

public HashTable() ist ein Konstruktor. Ihr arr[] sollte eigentlich ein privates Mitglied Ihrer Klasse sein, und Sie sollten es in allen Konstruktoren initialisieren oder sicherstellen, dass Sie nie zugreifen, ohne es zu initialisieren.

public class HashTable { 

    private String[] arr; 

    public HashTable() 
    { 
     //Create an array of size 101 
     arr[] = new String[101]; 
     System.out.println("Size1: "); 
    } 
etc... 
0

Da es scheint, dass Ihre Implementierung Array unterstützt, müssen Sie das Array als Membervariable deklarieren:

public class HashTable { 
String arr[] = null; 

Und dann initialisieren Sie es in Ihrem Konstrukteuren (Anmerkung in Java-Welt Methoden wie HashTable() genannt wird, einen Konstruktor) als:

arr = new String[whatever_size]; 
Verwandte Themen