0

わかりましたので、私が立ち往生しているJava coursetsの部分の割り当てを行っています:

「80 人のメンバーを持つ特定の議会を作成する操作 createparliamentMembers を実装します。」

そのため、メソッドを使用してコンストラクターを既に作成しています。これは、コンストラクターを使用してオブジェクトを作成する操作を記述した方法です。

public static void createparliamentMembers(){
    Member[] array = new Member[75];
    for(int i = 0; i < array.length; i++)
       {
        if (i < 35) array[i] = new Member(i, "Blue");
        else array[i] = new Member(i,"Red");
        }

    Legislator[] leg = new Legislator[3];
    for (int i = 0 ; i < leg.length; i++){
        leg[i] = new Legislator(i, "Impartial");
    }

    Leader[] lead = new Leader[2];
    for (int t = 0; t < lead.length; t++){
        if (t < 1) lead[t] = new Leader(1, "Red");
        else lead[t] = new Leader(2, "Blue");

    }

問題は、配列とオブジェクトがそれらを作成する操作にのみ存在するように見え、作成されたオブジェクトのメソッドを実行しようとすると、ドライバー クラスが配列を認識しないため、それらが機能しないことです。一方、これをドライバーの通常の部分として使用すると、正常に動作し、オブジェクトのすべてのメソッドが正常に動作します。

編集:わかりましたので、createparliamentMembers(); の外でそれらを初期化したにもかかわらず、以前と同じ問題が発生しています。

次のコードは、メソッドをテストするために使用しているドライバーです。

スレッド「メイン」での例外 java.lang.NullPointerException at Driver.main(Driver.java:11) コード array[1].FlipCoin(); 作成されたオブジェクトからメソッド Flipcoin を使用しようとしていますが、機能していません。

public static void main(String [] args) {
Commands.createparliamentMembers();
array[1].FlipCoin();
}
4

3 に答える 3

0

あなたはコメントで次のように述べています:

私は独自の議会クラスを持っており、議会のメンバーのためのメソッドとコンストラクターを含んでいます。上記のメソッドは Commands と呼ばれる別のクラスにありました。「議会オブジェクトを作成するときにメンバーを議会オブジェクトに追加できますか?」が完全には理解できません。議会はオブジェクトではなく、私が作成したい議員のコンストラクタとメソッドを含むクラスです。

議会はまだオブジェクトではありませんが、実際には作成する必要があります"which will create the particular Parliament with 80 members..."。プログラムの構造と特定の要件について詳しく教えていただく必要がありますが、次のことをお勧めします。

  • 最初に createParliamentMembers メソッドで議会オブジェクトを作成し、それを議会と呼びます。
  • 次に、そのメソッドで国会議員を作成します。
  • これらのメンバーを作成したら、議会オブジェクトである議会に追加します。
  • メソッドの最後に議会変数を返します。
  • これは、createParliamentMembers メソッドの署名を変更して、返すのではなくvoid、オブジェクトを返すように記述する必要があることを意味しParliamentます。
  • メイン メソッドでメソッドを呼び出すときは、返されるものをメイン メソッドにある議会変数に割り当てます。
于 2013-07-15T03:06:03.140 に答える
0

配列はローカルでのみ定義されます。つまり、メソッドで生きて死ぬことを意味します。メソッドが終了すると、それらはメモリ不足になります。

解決策は、これらの配列をインスタンス変数として定義することです。つまり、クラスの配列を定義してから、それらをメソッドで使用する必要があります。

class someClass {
    int[] myArray = new int[2];

    private void someMethod() {
        myArray[0] = 3;
        myArray[1] = //whatever
    }
 }
于 2013-07-15T02:08:24.187 に答える