修改在构造函数中创建的列表爪哇

时间:2020-06-22 10:05:28

标签: java list class constructor

我正在做一门课程的练习。练习告诉我:

-创建一个“计算器”类

-此类的每个新对象都应具有字符串列表,该列表将存储操作的历史记录(在构造函数中创建的列表)。构造函数不能有任何参数。

当然还有计算器的基本操作。

所以我开始创建它,这就是我现在得到的:

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添加一些内容吗?

2 个答案:

答案 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