好的,所以我正在为我的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();
}
答案 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..."
。您需要告诉我们有关您的程序结构和特定要求的更多信息,但我建议:
void
而不是返回Parliament
来返回{{1}}对象。答案 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);
}