从不同方法访问变量(Java)
还有一个问题要提出来。我当时正在做一个任务,创建散列函数和所有的jazz,我偶然发现了一个小问题从不同方法访问变量(Java),java,Java,还有一个问题要提出来。我当时正在做一个任务,创建散列函数和所有的jazz,我偶然发现了一个小问题 第35:21行,其中的内容为arrpos+=prearrpo&\uuuuuuuuuuuuuuuuuuu, 在我的脑子里。。。我试图做的是从HashTable()方法访问arr.length。我已经阅读了关于需要创建一个大小和长度的对象的建议;然而在我看来,这似乎过于复杂了- 是否有其他方法可以访问HashTable方法中的变量,但在insert方法中 另一个不太重要的问题涉及字母(charc)类中的
第35:21行,其中的内容为arrpos+=prearrpo&\uuuuuuuuuuuuuuuuuuu,
在我的脑子里。。。我试图做的是从HashTable()
方法访问arr.length
。我已经阅读了关于需要创建一个大小和长度的对象的建议;然而在我看来,这似乎过于复杂了-
是否有其他方法可以访问HashTable方法中的变量,但在insert方法中
另一个不太重要的问题涉及字母(charc
)类中的一大块if()
语句;我相信一定有一个更短的方法来做到这一点。。。我最初会使用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;
}
}
import java.io.*;
公共类哈希表{
公共哈希表(){
//创建大小为101的数组
字符串arr[]=新字符串[101];
//System.out.println(“Size1:”);
}
公共哈希表(int-tsize){
int size=2*t大小;
//System.out.println(“尺寸:+尺寸”);
布尔值isPrime=checkPrime(大小);
//System.out.println(“IsPrime:+IsPrime”);
while(isPrime==false){
//System.out.println(“尺寸:+尺寸”);
大小++;
iPrime=检查素数(大小);
}
//System.out.println(“尺寸:+尺寸”);
字符串arr[]=新字符串[大小];
}
公共布尔插入(字符串行){
字符串str=行;
char[]ch=str.toCharArray();
int slen=str.length();
int-arrpos=0;
int hash=slen;
对于(int i=0;i
公共哈希表()是一个构造函数。您的arr[]
实际上应该是类的私有成员,您应该在所有构造函数中初始化它,或者确保在未初始化它的情况下永远不会访问它
public class HashTable {
private String[] arr;
public HashTable()
{
//Create an array of size 101
arr[] = new String[101];
System.out.println("Size1: ");
}
etc...
由于您的实现似乎受阵列支持,因此需要将阵列声明为成员变量:
public class HashTable {
String arr[] = null;
然后在构造函数中初始化它(注意在Java世界中,像HashTable()
这样的方法称为构造函数):
关于你的
信
方法:@assylisa谢谢,这很有帮助!嗯??甚至还有比这更简单的方法<代码>返回字符.isLetter(ch)?(字符.toUpperCase(ch)-'A'+1):0代码>一行完成。@LouisWasserman,更好!非常感谢!
arr = new String[whatever_size];