Джава. Массив объектов - PullRequest
       16

Джава. Массив объектов

4 голосов
/ 20 января 2010

Проблема: у меня есть этот код:

public class Component {
public Component() {
// TODO Auto-generated constructor stub
 }
 public double[] Shifts ;
 public double[][] Couplings ;

}

public class Decouplage {
 public Decouplage(double[] GroupShifts, double[][] GroupCoup) {
  AllComponents = new Component(); 
  AllComponents.Shifts = GetShifts(...blah-blah-bla...);
  AllComponents.Couplings = GetGouplings(...blah-blah-bla...);
 }

public Component AllComponents ; 
}

Это работает.Но когда я пытаюсь создать массив AllComponents [10] этого класса Component

 public class Decouplage {
 public Decouplage(double[] GroupShifts, double[][] GroupCoup) {
  AllComponents = new Component()[nComponents]; /////HOW MUST I PUT IN ONE LINE THE NUMBER OF ELEMENTS AND THE () FOR CONSTRUCTOR????
  for (int iCounter=0;iCounter<nComponents;iCounter++){
         AllComponents.Shifts = GetShifts(...blah-blah-bla...);
         AllComponents.Couplings = GetGouplings(...blah-blah-bla...);
  }
 }
public Component[] AllComponents ; 
}

, он не компилируется.

Но если я игнорирую конструктор ()

public class Decouplage {
 public Decouplage(double[] GroupShifts, double[][] GroupCoup) {
  AllComponents = new Component[nComponents]; /////IS IT LEGAL TO IGNORE CONSTRUCTOR, EVEN IF IT IS EMPTY????
  for (int iCounter=0;iCounter<nComponents;iCounter++){
         AllComponents.Shifts = GetShifts(...blah-blah-bla...);
         AllComponents.Couplings = GetGouplings(...blah-blah-bla...);
  }
 }
public Component[] AllComponents ; 
}

он не может разрешить сдвиги и сцепления как поля ...

Что бы вы посоветовали?Примечание: GetShifts () не имеет ничего общего со стандартным Java getShift ().Это мое, оно работает хорошо, я проверил.

Спасибо!

Ответы [ 3 ]

12 голосов
/ 20 января 2010

Здесь есть две отдельные концепции: создание массива ссылок и создание экземпляров вашего класса. Итак, эта строка:

AllComponents = new Component[nComponents]

создаст массив Component ссылок. Первоначально все ссылки будут нулевыми. Если вы хотите заполнить его ссылками на новые экземпляры, вам нужно следовать этой строке:

for (int i = 0; i < nComponents; i++)
{
    AllComponents[i] = new Component();
}

РЕДАКТИРОВАТЬ: Чтобы ответить на комментарий, AllComponents является массивом - он не имеет понятия Shifts или Couplings. Если вам нужно установить сдвиги или связи для нового компонента, вы должны использовать либо:

for (int i = 0; i < nComponents; i++)
{
    AllComponents[i] = new Component();
    AllComponents[i].Shifts = // Code here
    AllComponents[i].Couplings = // Code here
}

или

for (int i = 0; i < nComponents; i++)
{
    Component component = new Component();
    component.Shifts = // Code here
    component.Couplings = // Code here
    AllComponents[i] = component;
}

или добавьте параметры в конструктор для Component, чтобы принять смены и связи.

Между прочим, я предполагаю, что вы новичок в Java, и вам нужна только помощь по этой конкретной проблеме на данный момент - когда вы будете готовы двигаться дальше, стоило бы взглянуть на Java соглашения о кодировании и более надежная инкапсуляция ваших данных. (Использование открытых переменных, как правило, плохая идея.)

1 голос
/ 20 января 2010

Попробуйте:

   public Decouplage(double[] GroupShifts, double[][] GroupCoup) {
      Component AllComponents[] = new Component[nComponents];
      for (int i = 0; i < AllComponents.length; i++) {
          AllComponents[i] = new Component();
          AllComponents[i].Shifts = GetShifts();
          AllComponents[i].Couplings = GetGouplings();
    }
1 голос
/ 20 января 2010
AllComponents = new Component[nComponents];
 for (int iCounter=0;iCounter<nComponents;iCounter++){
   AllComponents[iCounter] = new Component();
   AllComponents[iCounter].Shifts = GetShifts(...blah-blah-bla...);
   AllComponents[iCounter].Couplings = GetGouplings(...blah-blah-bla...);

пс: переменная, начинающаяся с заглавной буквы == плохая практика

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...