2013-11-01 5 views
2

Я новичок в java, и у меня возникают проблемы с пониманием того, как заполнить массив объектом вручную. Причина Я не сделаю это вручную, потому что у меня есть 40 объектов, которые мне нужно создать, где 20 объектов перейдут на arrayOne и другие 20 объектов перейдут в arrayTwo. Также каждый объект имеет уникальный параметр, например «Техас» или «Канада», который необходимо установить.Как вручную заполнить массив объектами?

Я обычно создаю массив так:

long[] arrayOne; 
arrayOne = new long[20]; 

и чем заполнить его, позволяет сказать, что номера через петлю или вручную. Однако теперь я имею дело с объектами и изо всех сил пытаюсь понять это, я попытался найти ответы здесь, в StackOverflow, но не смог понять, что там происходит.

Если это помогает, это конструктор для моего объекта

// Plane Constructor 
    public Plane (int i, String dest, String airl, String airc, double t) { 

      planeID = i; 
      destination = dest; 
      airline = airl; 
      aircraft = airc; 
      time = t; 

    }// END Plane Constructor 

ответ

5

Я бы предложил использовать ArrayList вместо массива, потому что список может расти, но массив имеет фиксированный размер. Однако, чтобы ответить на ваш вопрос:

Plane[] arrayOne = new Plane[20]; 
Plane[] arrayTwo = new Plane[20]; 

arrayOne[0] = new Plane(1001, "Timbuktu"); 
arrayOne[1] = new Plane(2930, "Siberia"); 
// etc. 

arrayTwo[0] = new Plane(2019, "France"); 
arrayTwo[1] = new Plane(1222, "Italy"); 
// etc. 

Если вы использовали ArrayList было бы:

List<Plane> arrayOne = new ArrayList<Plane>(); 
planes.add(new Plane(1001, "Timbuktu")); 
planes.add(new Plane(2930, "Siberia")); 
// etc. 

Или, если вы действительно фантазии:

List<Plane> planes = new ArrayList<Plane>() {{ 
    add(new Plane(1001, "Timbuktu")); 
    add(new Plane(2930, "Siberia")); 
}}; 

Во всех случаях может перебирать содержимое следующим образом:

for (Plane plane : arrayOne) { 
    System.out.println(plane.getDestination()); 
} 
0

U сначала создать массив Plane:

Plane[] planes = new Plane[20]; 

затем каждый объект:

planes[0] = new Plane(...); 

...

2
Plane[] array = new Plane[10]; 
array[0] = new Plane(/*specify your parameters here*/) 

Проверьте спецификацию языка Java chapter 10.

+0

Это очень некрасиво решение. Что делать, если вы не знаете, сколько объектов вы будете получать/откуда-нибудь? Динамический массив должен быть намного более эффективным. – Sajmon

+1

@Sajmom, OP говорят, что они новы для Java. Наверное, еще не изучили структуры данных. Вам нужно знать, как использовать массивы. Поэтому пусть OP работает до их запуска. Кроме того, OP специально сказал, что у них 40 объектов, 20 на массив. –

+1

@Sajmon, если я вижу вопрос «Как использовать массивы в Java?», Я показываю пример массивов в Java. Я не понимаю людей, которые рассказывают новичкам «Нет-нет-нет», это неправильный путь, используйте ArrayList, назначьте его интерфейсу List, чтобы впоследствии вы могли изменить реализацию и подумать о некотором шаблоне, который вы можете используйте здесь ». ОП попросил объяснить ему основы Java, что я и сделал. Если ему нужно узнать о ArrayList, он задаст другой вопрос или узнает его где-то в другом месте. – aga

1

Вы должны объявить массив объектов (в данном случае Plane) так же, как вы объявляете массив long - Plane[] arrayOne = new Plane[20];. Затем вы можете получить доступ к элементам, используя индексы таким же образом. Если вам действительно нужно заполнить его вручную, вы должны сделать что-то вроде:

arrayOne[0] = new Plane(1, "foo", "bar", "baz", 1.0); 
arrayOne[1] = new Plane(2, "fooo", "baar", "baaz", 2.0); 

Есть только две вещи, которые отличаются от использования Object[] массива из long[] - тип массива и тот факт, что в какой-то момент у вас есть использовать конструкторы для создания объектов. Однако вы можете использовать ранее созданный объект.

0

Вы можете использовать обычный interface, если элементы вашего array не обязательно являются экземплярами Plane.

Например,:

упаковка тест;

public class Main { 
    public static void main(String[] args) { 
     Flyer[] flyers = new Flyer[] { new Plane(), new Bird() }; 
      for (Flyer f: flyers) { 
       // you can only access method "fly" here, because it's the only 
       // method defined in your interface, but nothing 
       // stops you from adding more methods, as long as you implement 
       // them in the (non-abstract) classes 
       f.fly(); 
      } 
    } 
} 

class Plane implements Flyer { 
    // TODO id, destination, airline, etc. getters/setters 
    @Override 
    public void fly() { 
     System.out.println("Weeee I'm flying!"); 
    } 
} 

class Bird implements Flyer { 
    // TODO whatever properties/getters/setters 
    @Override 
    public void fly() { 
     System.out.println("Chirp chirp"); 
    } 
} 

interface Flyer { 
    void fly(); 
} 

Выход:

Weeee I'm flying! 
Chirp chirp 
+0

Действительно оцениваю вас, принимая его дальше, но я думаю, что что-то вроде этого еще не на моем уровне, я не буду сначала изучать основы, но, безусловно, обязательно посмотрю на это последнее! – Ilja

+0

@Ilja конечно! Я мог бы неправильно истолковать ваш вопрос :) – Mena

Смежные вопросы