我正在尝试定义一个用户定义的元素数量(度)的数组,然后是一个允许用户一次设置一个元素(系数)的方法。
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;
中收到了编译错误。
答案 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];
}