我正在做一门课程的练习。练习告诉我:
-创建一个“计算器”类
-此类的每个新对象都应具有字符串列表,该列表将存储操作的历史记录(在构造函数中创建的列表)。构造函数不能有任何参数。
当然还有计算器的基本操作。
所以我开始创建它,这就是我现在得到的:
class Calculator {
public Calculator () {
List<String> history = new LinkedList<String>();
}
public double add(double num1, double num2) {
history.add("added " + num1 + " to " + num2); //here's the problem
return num1 + num2;
}
}
但是当我尝试将新字符串添加到历史记录列表时,我无法做到这一点,因为它在程序的那个位置不存在。
不是在构造函数中而是直接在类中创建List会更好吗?
即使可以,我也应该按照他们告诉我的方式进行此练习,所以您能帮我看看如何向构造函数中创建的List添加一些内容吗?
答案 0 :(得分:3)
该错误是由于以下事实造成的:add()
试图获取history
,这可能是构造函数中的局部变量,而因为本地变量没有范围之外,add()
将无法达到该范围。
因此,要解决此问题,请在类级别像字段history
那样进行修改,以便其所有方法都可以使用。它可以在构造函数中初始化,并且可以在类中很好地使用。根据可见性,可以为public | private | protected
。您的代码可能看起来像
class Calculator {
private List<String> history;
public Calculator () {
history = new LinkedList<String>();
}
public double add(double num1, double num2) {
history.add("added " + num1 + " to " + num2);
return num1 + num2;
}
}
答案 1 :(得分:0)
使用诸如继承之类的oop概念,可以将代码重写为:
import java.util.LinkedList;
public class Calculator extends LinkedList<String>
{
public static void main(String[] args)
{
Calculator c = new Calculator();
System.out.println(c.add(1,2));
System.out.println(c.getFirst());
}
public Calculator () {
}
public double add(double num1, double num2) {
this.add("added " + num1 + " to " + num2); //here's the problem
return num1 + num2;
}
}
输出:
3.0
added 1.0 to 2.0