2012-02-19 12 views
2

私はjavaprogrammingforums.comでこの同じ質問をしましたが、彼らのウェブサイトは現在ダウンしているようです。だから私は私が得た応答(もしあれば)を見ることができませんでした。とにかく、私はこのJava HWの割り当てにひどく悩まされています。私がこれまで行ってきたことは、完成の面ではよく見えましたが、現時点で正しい値が出てきただけです。コンストラクタパラメータからの値で配列を初期化できません - 初期化することはできませんか?

(これは、他には「テスター」で、コンストラクタを持つ2つの第二のクラスの一部でしかありません)

//private variables 
boolean myP; 
boolean myPla; 
boolean myGl; 
boolean myCa; 

double myPlot; 
int myCrust; 

double myReduct; 
double myNet; 
double myGross; 

boolean [] trshIt = {myP, myPla, myGl, myCa}; 
double [] CO2TrashEmissions = {184.0, 25.6, 46.6, 165.8}; 

//constructor 
CO2FromWaste(int crust, boolean p, boolean pl, boolean gl, boolean ca) 
{ 
    myPlot = 1018.0; 
    myCrust = crust; 
    myP = p; 
    myPl = pl; 
    myGl = gl; 
    myCa = ca; 
} 

私の問題があることブール配列である、trshIt:私はこれを持っているふり。私はまだ初期化されていない変数を配列に入れているので、これらの変数にはデフォルト値のfalseが返されます。最初にコンストラクタに入れると、変数trshItが見つからないというエラーが表示されます。私はその変数を呼んでいるインスタンスを指しています。だから私はさまざまな分野でさまざまな形を試してきましたが、今は迷路に閉じ込められていて、その配列を適切に動作させようとしています。私が得ることができるすべての援助が必要です。アイデア?

+0

同じ質問を複数の場所に投稿しないでください。また、最も重要なものを除いて、多くのタグを追加しました。 "Java" ... –

+0

Um。まあ、私がやっていたもう一つのフォーラムはダウンしています、これは私の最初のスレッドです...そして、私はタグを修正します。 – Michael

答えて

0

クラスのメンバとして宣言trshItが、このように、コンストラクタでそれを初期化:

boolean [] trshIt; 
double [] CO2TrashEmissions = {184.0, 25.6, 46.6, 165.8}; 

//constructor 
CO2FromWaste(int crust, boolean p, boolean pl, boolean gl, boolean ca) 
{ 
    myPlot = 1018.0; 
    myCrust = crust; 
    myP = p; 
    myPl = pl; 
    myGl = gl; 
    myCa = ca; 

    trshIt = new boolean[4]; 
    trshIt[0] = myP; 
    trshIt[1] = myPla; 
    trshIt[2] = myGl; 
    trshIt[3] = myCa; 
} 
+0

うーん、良い試みですが、私はそれを試しましたが、trshIt配列の最初の括れ括弧の直前に「不正な式の開始」エラーが表示されます。そしてなぜ私がこれを得るのかはわかりません。 – Michael

+0

'boolean [] a = {true、boolean []を実行すると、変数を宣言するときにのみショートカット配列表記を使うことができます:' trshIt = new boolean [] {m​​yP、myPla、myGl、myCa}; ' –

+0

false}; 'しかし、' boolean [] aではありません。 a = {true、false}; ' – scibuff

0

あなたがこれを行うことはできません何らかの理由:Javaでは

//private variables 
boolean myP; 
boolean myPla; 
boolean myGl; 
boolean myCa; 

double myPlot; 
int myCrust; 

double myReduct; 
double myNet; 
double myGross; 

boolean [] trshIt; 
double [] CO2TrashEmissions; 

//constructor 
CO2FromWaste(int crust, boolean p, boolean pl, boolean gl, boolean ca){ 

    myPlot = 1018.0; 
    myCrust = crust; 
    myP = p; 
    myPl = pl; 
    myGl = gl; 
    myCa = ca; 
    trshIt = new boolean[4]; 
    trshIt[0] = myP; trshIt[1] = myPla; 
    trshIt[2] = myGl; trshIt[3] = myCa; 

    double [] CO2TrashEmissions = {184.0, 25.6, 46.6, 165.8}; 
} 

、プリミティブので、(int型は、char型、ブール)が値によって割り当てられているので、あなたがしなければ

boolean b = true; 
boolean[] a = { b }; 
b = false; 

System.out.println((a[0] == true) ? "true" : "false"); 

は "真" に印刷されますは、bに "ポインタ"を格納しないので、a配列の値は変更しませんが、値はbでした。

+0

うーん、私はあなたのスタイルをして、私はその最初のエラーを渡すことができた。しかし、スクリプトを実行すると、forループで長さを尋ねると、** trshIt **がnullであるというエラーが表示されるようになりました。デバッガでその値を調べても、nullであることが報告されます。私はこれまでのようなことは一度もなかった。思考?途中でエラー1を手伝ってくれてありがとう。 – Michael

+0

この特定のコンストラクタが呼び出されない場合のみ、nullにすることができます。あなたは複数のコンストラクタを持っていますか、どこにでも 'new CO2FromWaste(crust、p、pl、gl、ca)'の代わりに 'new CO2FromWaste()'を使いますか? – scibuff

+0

私はただ1つのコンストラクタしか持っていないので、arraylistのオブジェクトとしてパラメータを使って新しいCO2FromWasteを数回使用しました。 – Michael

2

trshItはコンストラクタで初期化される前にフィールドから値を取得するため、動作しません。

他のすべての変数が機能した後で、コンストラクターでtrshItを初期化します。

また、CO2TrashEmissionsの外観(それは多分myPlotでもかまいません)によって一定であるため、変更を防ぐためにstaticとfinalと宣言してください。要素自体の変更を防ぐことはできませんが。

private static final double[] CO2TrashEmissions = {184.0, 25.6, 46.6, 165.8}; 
//Fields.... 
boolean[] trshIt; 

//constructor 
CO2FromWaste(int crust, boolean p, boolean pl, boolean gl, boolean ca) 
{ 
    myPlot = 1018.0; 
    myCrust = crust; 
    myP = p; 
    myPl = pl; 
    myGl = gl; 
    myCa = ca; 

    trshIt = new boolean[]{myP, myPla, myGl, myCa}; 
} 

はまた、ブール値は、あなたの私*変数のいずれかを変更、リテラルなので、あなたのプログラムが何をしているかに応じて、問題がある可能性があります配列に対応する要素を変更しないことに注意してください。

+0

私は、主にarrayListsを利用して情報を計算して印刷しています。ブール変数は必要に応じて変更されました。私はまだ私に教えられていないので、私はスクリプトの中で静的と最終的な用語を利用することを許可されているとは思わない。しかし、もし私ができるならば、私はそれを全面に渡っていたでしょう。より有用なものほど良い。私が似たような状況にある場合、私はこれを参照して、その地獄のためのスクリプトを作成しています。 – Michael

+0

オブジェクトを操作するメソッドを使用してフィールドを変更したときに、コンストラクタの外にあることを意味しました。後でそのクラスについて学習する必要があります。幸運を祈り、あなたが必要とする以上に多くのことを学ぶことをためらってはいけません。 – Hedja

関連する問題