2017-06-22 2 views
-2

私はユーザー定義の要素数(度)の配列を定義しようとしています。次に、ユーザーが要素(係数)を一度に1つずつ設定できるメソッドです。メソッドのコンストラクタで初期化された配列の使い方は?

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

javaの変数スコープを理解するには、このリンクをお読みください。 https://www.tutorialspoint.com/java/java_variable_types.htm – vsbehere

+0

シンプル:変数を使用せず、**フィールド**を使用します。これは本当に超基本的なものです。素敵な答えがありましたが、このサイトは何度も同じ基本を繰り返し説明するものではないことをご理解ください。あなたが本/次のチュートリアルを読んでいるあなたのために、SOを**置き換え**と仮定しないでください。 – GhostCat

答えて

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; 
    } 

} 

注意をsetCoefficientにメンバ変数coefを返すことは、このクラスのユーザが直接配列を変異させることが可能になるということ(再度setCoefficientメソッドを呼び出す必要はありません)、これは良い考えではありません。メンバー変数はプライベートである必要があり、それらを含むクラスのメソッドによってのみ変更する必要があります。

そこで私は方法を変更したい:あなたはどちらか、クラスの外部からの配列の要素にアクセスする必要がある配列の個々の値を返すdouble getCoefficient(int index)メソッドを追加、または追加する場合

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[] getCoefficients()メソッドを使用します。

+3

'setCoefficient'がなぜフィールドを返すのか分かりません。それについて言及する価値があるかもしれません。 – Bathsheba

+0

ニース。 upvoteをしてください。 – Bathsheba

1

COEF停戦はすぐにコンストラクタが戻るなどとしてアクセスできるようにするので、これはそう何の方法は...決して

ドゥを、そのオブジェクトを取得することはできません、...

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

スコープの問題です代わりに:

class Polynomial { 
    private double[] coef; 

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

正解ですが、基本的にはEran'sを複製します。 – JacksOnF1re

+0

@ JacksOnF1reは、彼の後ろにあるほとんど20秒です。:-) –

+1

20秒は、175Kという格好になります。 –