2013-07-15 4 views
0

Ok поэтому я делаю задание для моего 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();

Следующий код драйвера им с помощью для тестирования методов: Он продолжает говорить, что есть:

Исключение в потоке «основного» java.lang.NullPointerException на Driver.main (Driver.java:11) , который является массивом кода [1] .FlipCoin(); поскольку я пытаюсь использовать метод flipcoin из созданных объектов, но он не работает.

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

'», который будет создать отдельный парламент с 80 членами ... »« У вас есть парламентский класс? Если да, то где это? Можете ли вы добавить членов в объект Парламента по мере их создания? Каким классом является метод выше? –

+0

У меня есть класс парламента, который он сам по себе, и содержит методы и конструкторы для членов парламента. Вышеупомянутый метод был в отдельном классе под названием «Команды». Я полностью не понимаю: «Можете ли вы добавить членов к объекту парламента, когда вы их создаете?» Парламент не является объектом больше, чем класс, содержащий конструктора и методы для членов парламента, которые я хочу создать. – user1761953

+0

Использование [соглашения об именах] (http://www.cwu.edu/~gellenbe/javastyle/method.html) может только помочь вам. – Aaron

ответ

0

Ваши массивы определяются только локально, что означает, что они живут и умирают с помощью метода. Когда ваш метод заканчивается, они теряют память.

Решение состоит в том, чтобы определить эти массивы как переменные экземпляра. Я имею в виду, что вам нужно определить массивы для вашего класса, а затем использовать их в методе:

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

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

Не обязательно, поскольку его вопрос остается неполным. Он может даже не нуждаться в массивах. –

+0

Вопрос не завершен, но он упоминает о невозможности доступа к этим массивам из другого класса. Логическим первым шагом для этого является создание элементов экземпляров массивов, а не локальных. Я не говорю, что исправляет его программу, но он отвечает на его вопрос, насколько я понимаю. – Kon

+0

Да, так что это, в конце концов, работало, мне просто нужно было вызвать класс, чтобы массив был iniatied для работы метода. I.e Массив был инициализирован в Commands.java, а метод, которым я хочу использовать объект, был flipcoin. так Commands.array [1] .flipcoin(); Прежде чем я просто пытался использовать массив [1] .FlipCoin(); не сообщая программе, где был инициализирован массив, чтобы в главном не найти массив. – user1761953

0

Вы заявляете в комментарии:

У меня есть класс парламента это на него самостоятельно и содержит методы и конструкторы для членов парламента. Вышеупомянутый метод был в отдельном классе под названием «Команды». Я полностью не понимаю: «Можете ли вы добавить членов к объекту парламента, когда вы их создаете?» Парламент не является объектом больше, чем класс, содержащий конструктора и методы для членов парламента, которые я хочу создать.

Парламент не является объектом еще, но вы должны фактически создать, и на самом деле ваши инструкции сказать вам только что: "which will create the particular Parliament with 80 members...". Вам нужно будет рассказать нам больше о структуре вашей программы и ваших конкретных требований , но я предлагаю:

  • Сначала нужно создать объект парламента в методе createParliamentMembers, и назвать его парламентом.
  • Затем создайте членов парламента в этом методе.
  • Когда вы создаёте этих членов, добавьте их в объект парламента, парламент.
  • В конце метода возвращение переменная парламента.
  • Это означает, что ваша подпись метода createParliamentMembers должна измениться, чтобы вместо возврата void ее нужно было записать, чтобы вернуть объект Parliament.
  • При вызове метода в основном методе присвойте то, что он возвращает переменной парламента, которая находится в основном методе.
0

Похоже, вы пишете factory method. Создайте конструктор для парламента, как это:

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

Затем измените метод возвращает объект парламента и в методе передать ваши инициализированы массивы в конструктор парламента, как это:

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