2010-01-20 10 views
4

Проблема в том, что у меня есть кодJava. Массив объектов

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

не copmile.

Но если игнорировать construstor-х()

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() не имеет ничего общего с getShift() для Java. Он мой, он работает хорошо, я проверил.

Thanx!

+3

Вы не должны назвать ваши переменные, начиная с Заглавная буква. Следуйте соглашениям Java. –

ответ

12

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

AllComponents = new Component[nComponents] 

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

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

EDIT: Для того, чтобы ответить на комментарий, 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 coding conventions и инкапсулируя ваши данные более надежно. (Использование общих переменных, как правило, плохая идея.)

+0

Понял спасибо. , но исправление к \t \t AllComponents = новый компонент [nComponents]; \t \t для (INT = 0 iCounter; iCounter Andrew

+0

ooops ... soryy. Я не знаю, как разместить хорошо отформатированные комментарии ... :( – Andrew

+0

AllComponents - это массив - вам нужны 'AllComponents [i] .Shifts = ...' и 'AllComponents [i] .Couplings = ...' –

1
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...); 

пс: переменная, начиная с верхнего регистра == плохая практика

+1

Я бы сказал, что переменные, являющиеся публичными, являются более серьезной проблемой :) –

+0

Почему? ... Я всегда отделял их как это ... Где может быть проблема B? P.S. Thanx для ответа на главный Q! – Andrew

1

Try:

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(); 
    } 
+0

Спасибо! Кажется, он работает – Andrew