我对如何创建我正在定义的对象的实例以及如何访问它们的字段感到困惑。完整代码如下。我的类称为 compressedString,我创建了一个构造函数:
public CompressString(char let, int appears){
char letter = let;
int freq = appears;
}
稍后在我的代码中,我尝试在从链表中删除 CompressString 对象后访问字段 letter 和 freq,但这正是我遇到麻烦的地方。
CompressString tempNode;
for(int j = 0; j<compressedString.length; j+=2){
tempNode = list.pop();
array[j] = tempNode.letter;
array[j+1] = tempNode.freq;
}
在我为字母和频率创建类级变量之前,Eclipse 给了我一个错误。为什么我需要类级变量来访问这些字段,每次我从这些对象的链表中弹出一个节点时,我是否会覆盖它们?
完整代码如下:
public class CompressString{
private char freq = 0;
private char letter;
public CompressString(char let, int appears){
char letter = let;
int freq = appears;
}
public static void main(String[] argv){
String str = "aaabbbccc";
String str1 = "abc";
String str2 = "abbbcccaaacccbbbccccc";
System.out.println(compress(str));
System.out.println(compress(str1));
System.out.println(compress(str2));
}
private static String compress(String str){
LinkedList<CompressString> list = new LinkedList();
char[] array = str.toCharArray();
char temp = array[0];
int i = 1;
int counter = 1;
while(i<array.length){
if(temp != array[i]){
CompressString node = new CompressString(temp, counter);
list.add(node);
}
temp = array[i];
counter = 1;
i++;
}
char[] compressedString = new char[list.size()*2];
CompressString tempNode;
for(int j = 0; j<compressedString.length; j+=2){
tempNode = list.pop();
compressedString[j] = tempNode.letter;
compressedString[j+1] = tempNode.freq;
}
str = Arrays.toString(compressedString);
return str;
}
}
现在它只打印空白
最佳答案
您的构造函数未设置字段值,仅设置本地值。这个
public CompressString(char let, int appears){
char letter = let;
int freq = appears;
}
应该是
public CompressString(char let, int appears){
this.letter = let;
this.freq = appears;
}
还要确保 freq
和 letter
被标记为 public
,或者定义方法,例如 getFreq()
和 getLetter()
如果您还没有的话。
关于java - 在 Java 中访问对象成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25371718/