【问题标题】:Modifing a list created in constructor | Java修改在构造函数中创建的列表 |爪哇
【发布时间】:2020-10-12 04:02:58
【问题描述】:

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

-创建一个“计算器”类

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

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

所以我已经开始创建这个,这就是我现在所拥有的:

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 中添加一些东西吗?

【问题讨论】:

  • 嘿!你可以告诉你的导师写出更精确的要求。您可能应该在构造函数中定义列表,但将其声明为对象属性。
  • 也这么想...您可以将其设为private List&lt;String&gt; history; 并在构造函数中对其进行初始化。然后你可以在该类的不同方法中add 值。
  • 我敢打赌,因为您的要求这个类的每个新对象都应该有字符串列表,其中将存储操作的历史记录(在构造函数中创建的列表)。构造函数不能有任何参数。 没有明确说明列表必须缩小到构造函数范围。拥有该列表的不是对象,而是当前对象的构造函数。
  • 谢谢你们 :) 我会这样做的。

标签: java list class constructor


【解决方案1】:

错误是因为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;
    }
}

【讨论】:

  • 您完全忽略了 OP 知道这一点。这个问题问的是别的东西。
  • 是的,OP 可能知道这一点,但是我可以得到 OP 的问题,因为“但是当我尝试将新字符串添加到历史列表时,我不能这样做,因为它在程序的那个地方不存在......我应该按照他们告诉我的方式做这个练习,所以你能帮助我并展示如何在构造函数中创建的列表中添加一些东西'因此我建议..
  • 很公平,但是请添加更多解释为什么在他当前的状态下它不起作用以及为什么他必须声明列表作为对象属性。我想你会同意只是添加(明显/微不足道的)private List&lt;String&gt; history; 作为整个答案不应该是 Stack Overflow 标准。
  • 是的,我知道这里的范围问题。谢谢你的解释,我会那样做的:)
【解决方案2】:

使用像继承这样的 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-02
    • 2021-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-06
    • 1970-01-01
    • 2019-04-17
    相关资源
    最近更新 更多