0

そこに出す別の質問。私はハッシュ関数とそのすべてのジャズを作成するための割り当てに取り組んでいました、そして私は小さな問題に遭遇しました。

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

私の頭の中で動作します...私がやろうとしているのは、メソッドarr.lengthからのアクセスです。HashTable()サイズarr.lengthのオブジェクトを作成する必要がある提案を読みました。しかし、私の考えでは、これは非常に複雑に思えます-

HashTableメソッドで変数にアクセスできますが、insertメソッド内にアクセスする別の方法はありますか?

もう1つのそれほど重要ではない質問には、letter( )クラスのif()ステートメントの巨大なブロックが含まれます。char cこれを行うにはもっと短い方法があるはずです...私は最初にASCII値を使用していました。しかし、仕様は小文字/大文字に1〜26の値を使用することに非常に細心の注意を払っていました-

ありがとう

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;
    }
}
4

2 に答える 2

1

public HashTable()コンストラクタです。あなたarr[]は実際にはクラスのプライベートメンバーである必要があり、すべてのコンストラクターで初期化するか、初期化せずにアクセスしないようにする必要があります。

public class HashTable {

    private String[] arr;

    public HashTable() 
    {
        //Create an array of size 101
        arr[] = new String[101];
        System.out.println("Size1: ");
    }
etc...
于 2012-04-09T22:57:23.440 に答える
0

あなたの実装は配列に裏打ちされているように見えるので、配列をメンバー変数として宣言する必要があります。

public class HashTable {
 String arr[] = null;

そして、コンストラクターで初期化します(コンストラクターHashTable()と呼ばれるJavaの世界のメソッドに注意してください):

arr = new String[whatever_size];
于 2012-04-09T23:02:03.443 に答える