通过构造函数初始化/创建对象

时间:2013-07-15 02:07:10

标签: java constructor initialization

好的,所以我正在为我的Java coursets做一个作业,我坚持的是:

“实施创建特定议会的行动createparliamentMembers 有80名成员。“

所以我已经用它的方法创建了构造函数。这就是我编写使用构造函数创建对象的操作的方法。:

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()之外启动了它们;

以下代码是用于测试方法的驱动程序:它一直说有一个:

Driver.main中的线程“main”java.lang.NullPointerException中的异常(Driver.java:11) 这是代码数组[1] .FlipCoin();因为我试图从创建的对象中使用方法flipcoin,但它不起作用。

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

3 个答案:

答案 0 :(得分:0)

您的数组仅在本地定义,这意味着它们可以使用该方法生存和死亡。当你的方法结束时,它们会被记忆不足。

解决方案是将这些数组定义为实例变量。我的意思是,你需要为你的类定义数组,然后在你的方法中使用它们:

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

    private void someMethod() {
        myArray[0] = 3;
        myArray[1] = //whatever
    }
 }

答案 1 :(得分:0)

您在评论中说明:

  

我确实有一个议会类,它包含了议会成员的方法和构造函数。上面的方法是在一个名为Commands的seprate类中。我完全不明白“你可以在创建它们时将成员添加到议会对象吗?”议会不是一个对象,而是一个包含我想要创建的议会成员的构造函数和方法的类。

议会不是 尚未 的对象,但实际上你应该创建一个,事实上你的指示只是告诉你:"which will create the particular Parliament with 80 members..."。您需要告诉我们有关您的程序结构和特定要求的更多信息,但我建议:

  • 首先在createParliamentMembers方法中创建一个Parliament对象,并将其命名为议会。
  • 然后用该方法创建议会成员。
  • 当您创建这些成员时,将它们添加到议会对象议会。
  • 方法结束时 返回 议会变量。
  • 这意味着您的createParliamentMembers方法的签名必须更改,以便返回void而不是返回Parliament来返回{{1}}对象。
  • 在main方法中调用方法时,将其返回的内容分配给main方法中的Parliament变量。

答案 2 :(得分:0)

看起来你正在写factory method。像这样为议会创建一个构造函数:

public Parliament(Member[] members, Legislator[] legislators, Leader[] leaders) {
    // do whatever with what's passed in
}

然后更改你的方法以返回一个Parliament对象,并在方法中将初始化的数组传递给Parliament构造函数,如下所示:

// same code as your except the last line
public static Parliament createParliament(){
    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");

    }
    return new Parliament(array, leg, lead);
}