我构建了一个Purse
类,其中包含以下内容:
public Purse(){
ArrayList<String> coins = new ArrayList();
}
我向对象添加字符串的功能:
public void addCoin(String coinName){
coins.add(coinName);
}
这个想法是每个Purse对象都可以包含一个字符串列表。但是,我无法使用我的方法访问ArrayList<String> coins
。
例如,我写这个方法来反转字符串的顺序
public void reverse(){
for (int j = coins.size() - 2; j > -1; j--){
coins.add(coins.get(j));
coins.remove(j);
}
调用无法找到符号coins
的错误。
如何使我的方法可以访问我在构造函数中创建的数组列表?对于this.coins.add(coinName)
方法,我需要说void addCoin
,或者对于反向方法,我需要说this.coins.add(this.coins.get(j))
吗?
答案 0 :(得分:3)
您需要在构造函数之外移动coins
的声明:
private List<String> coins;
public Purse(){
coins = new ArrayList<String>();
}
这会使coins
成为您班级的私有字段,使其可以从Purse
的所有非静态方法访问。目前,您正在创建一个局部变量coins
,当构造函数退出时,该变量将无法访问。
答案 1 :(得分:2)
将ArrayList
声明为构造函数之外的字段。也可以使用List
界面代替ArrayList
。
public class Purse{
private List<String> coins= new ArrayList<String>();
public Purse(){
}
}
在构造函数内部声明时,列表的范围仅限于构造函数方法。声明为类中的字段,类{}内的所有方法都可以访问List
。
答案 2 :(得分:0)
通过在构造函数中声明coins
变量,您将变量置于构造函数块的本地。一旦你在块之外,就不再可以访问coins
变量了。
因此,将coins
声明为Purse
类的实例变量。
例如:
public class Purse {
private List<String> coins;
public Purse() {
coins = new ArrayList<String>();
}
}