2013-03-18 2 views
0

Вот что я пытаюсь сделать:Java инициализация чистая-структуры

public class myClass 
{ 
    int x; 
    int y; 
} 

Я узнал, C++, так что я пытался сделать это:

myClass [] a = new myClass[5]; 
for(int i =0; i < 4; i++) 
    a[i].x = 0; 

Этого не делает ничего, потому что все a [i] равны нулю.

Я знаю, что это противоречит основному принципу Java, но есть продукт под названием Alljoyn, которые заставляют меня сделать это, см:

https://www.alljoyn.org/docs-and-downloads/documentation/guide-alljoyn-development-using-java-sdk-rev-j#unique_28

AllJoyn оленья кожа позволяют конструктор или другие методы в класс. Есть ли другой способ инициализации чистой структуры?

+0

Вы посмотрели: http://stackoverflow.com/questions/36701/struct-like-objects-in-java и http://stackoverflow.com/questions/5889034/how-to-initialize- ан-массив из-объектов-в-Java? –

+0

Java любезно добавляет конструктор по умолчанию ко всем классам, которые вообще не определяют конструкторы. Вы можете создавать экземпляры своего класса 'struct', вызывая' new myClass() '. – Perception

ответ

2

Вы не инициализируется любой объект, попробуйте:

myClass [] a = new myClass[5]; 
for(int i =0; i < 4; i++){ 
    a[i] = new myClass(); 
    a[i].x = 0; 
} 
+1

Спасибо большое !!! – user2184037

+0

@ user2184037 вы все равно можете пометить его как принятое. – n611x007

1

Вы должны сначала instialize все myClass вашего массива:

myClass[] a = new myClass[5]; 
for(int i =0; i < 4; i++) { 
    a[i] = new MyClass(); 
    a[i].x = 0; 
} 
5
  1. В Java нет такого понятия, как структуры , То, что вы представили, - это класс.
  2. Как вы видели a[i]: null, потому что ссылки в вашем массиве инициализируются null. Вы еще не создали какой-либо объект. Используйте a[i] = new myClass() в вашей петле. Этот конструктор с 0 аргументами для класса myClass будет сгенерирован Java.
  3. Имена классов в Java написаны LikeThis по соглашению.
  4. a[i].x = 0 бесполезен. Read о примитивных типах данных в Java. int поля по умолчанию инициализируются 0 компилятором.
  5. Выполняя i < 4, вы не инициализируете последний элемент (пятый). Лучше всегда делать i < a.length.
+0

+1 Это действительно очень полный ответ. – igarcia

+0

Я бы не назвал эти «плохие» привычки C++. Назначение переменной Struct - неплохая идея, она может быть полезна. – nmr

+0

вы скорректировали код. можете ли вы добавить, что должен делать OP на Java, когда он концептуально пытается «инициализировать экземпляры структуры»? – n611x007