如何使用在方法中的构造函数中初始化的数组?

时间:2017-06-22 11:55:34

标签: java arrays methods constructor

我正在尝试定义一个用户定义的元素数量(度)的数组,然后是一个允许用户一次设置一个元素(系数)的方法。

class Polynomial 
{

    public Polynomial(int degree)
    {
        double[] coef = new double[degree];
    }

    public double[] setCoefficient(int index, double value) 
    {
        coef[index] = value; //coef was set in the constructor
        return coef;
    }
}

我在coef[index] = value;中收到了编译错误。

2 个答案:

答案 0 :(得分:8)

您将coef数组定义为构造函数的局部变量,这意味着它不能在其他任何地方使用。

您必须将其定义为实例成员才能从其他方法访问它:

class Polynomial {

    private double[] coef; // declare the array as an instance member

    public Polynomial(int degree) 
    {
        coef = new double[degree]; // initialize the array in the constructor
    }

    public double[] setCoefficient(int index, double value) 
    {
        coef[index] = value; // access the array from any instance method of the class 
        return coef;
    }

}

请注意,在coef中返回成员变量setCoefficient将允许此类的用户直接改变数组(无需再次调用setCoefficient方法),这不是一个好主意。成员变量应该是私有的,并且只能通过包含它们的类的方法进行变异。

因此,我将方法更改为:

public void setCoefficient(int index, double value) 
{
    // you should consider adding a range check here if you want to throw
    // your own custom exception when the provided index is out of bounds
    coef[index] = value;    
}

如果您需要从类外部访问数组元素,请添加一个返回数组单个值的double getCoefficient(int index)方法,或者添加一个返回double[] getCoefficients()方法数组的副本

答案 1 :(得分:1)

这是范围问题......

public Polynomial(int degree){
     double[] coef = new double[degree];
}

因为 coef 在构造函数返回后立即停止访问,因此没有方法可以永远不会获得该对象...

改为:

class Polynomial {
    private double[] coef;

    public Polynomial(int degree) {
        coef = new double[degree];
    }