2014-05-27 6 views
0

у меня есть этот класссоздать массив объектов, которые имеют функцию конструктора

public class customer { 

    int id; 
    int status ; 
    customer(int value) 
    { 

     id = value; 
     status = 0; 

    } 
} 

Я хочу создать массив состоит из 100 объектов заказчика. Как я могу передать аргумент функции constractor класса customer?

public class barbershop { 
    Queue WaitSeat ; 
    Queue WaitRoom ; 
    static barber [] bb ; 
    static customer [] cc; 
    barbershop(){ 
     WaitSeat = new PriorityQueue(4); 
     WaitRoom = new PriorityQueue(13); 
     bb = new barber[3]; 
     cc = new customer [100]{1}; // problem ! 

    } 

} 

ответ

4

Создание объектов в пределах цикла и поместить их в массив

Вам нужно создать каждый объект по отдельности, а затем поместить его в массив. Это две отдельные операции (хотя они могут находиться в одной строке). Цикл сделает это намного более приятным.

cc = new customer[100]; 
for(int i=0;i<cc.length;i++){ 
    cc[i]=new customer(1); 
} 

его же для объектов без аргументов конструкторов

Хотя компилятор не жаловался, я не верю, что bb = new barber[3]; делает то, что вы думаете, что он делает. Он создает массив, достаточно большой, чтобы соответствовать 3 ссылкам на объект Barber. Но он не создает эти объекты, а только массив. В этот момент bb содержит {null, null, null}, поэтому вам нужно будет использовать аналогичный цикл для заполнения bb с объектами Barber.

Java именование

Также конвенция использовать UpperCamelCase для имен классов. Таким образом, customer должно быть Customer и barber должно быть Barber. В равной степени имена переменных должны быть ниже CamelCase, поэтому WaitSeat должно быть waitSeat и WaitRoom должно быть waitRoom.

0
cc = new customer [100] 

Это создаст реф cc удерживающий 100 Customer refs.

for(int i=0;i>cc.length;i++){ 
    cc[i]=new customer(1); 
} 
-1
public class barbershop { 
    Queue WaitSeat ; 
    Queue WaitRoom ; 
    static barber [] bb ; 
    static customer [] cc; 
    barbershop(){ 
     WaitSeat = new PriorityQueue(4); 
     WaitRoom = new PriorityQueue(13); 
     bb = new barber[3]; 

     for(i=0;i<100;i++) 
     { 
      cc[i] = new customer (i); 
     } 

    } 

} 
+0

Loop не будет выполнять ... –

+0

Был typo..Thanks. –

+1

Я бы сказал, что [бесшумные петли - очень опасные звери] (http://cafe.elharo.com/blogroll/braceless-if-considered-harmful/); подвержены более поздним ошибкам при изменении кода –

0

Во-первых, классы всегда должны быть написаны в CamelCase.
Во-вторых, я не думаю, что это возможно. Вы coudl использовать цикл как это:

cc = new Customer[100]; 
for(int i = 0; i < 100; i++) { 
    cc[i] = new Customer(i); 
} 
1

Вы путаете array инициализации с инициализации объекта.

cc является array из Customer (обратите внимание, заглавные буквы здесь).

Чтобы получить доступ к конструктору Customer и получить экземпляр, вам необходимо заполнить ваши array экземплярами.

Чтобы упростить проблему вы можете сделать:

cc = new Customer[100]; 
    Arrays.fill(cc, new Customer(1)); 

Это наполнит ваши 100 размера array с 100 элементов ссылок один экземпляр Customer которого id будет 1.

Осторожно, экземпляр делится на 100 элементов.

В свою очередь, если вы изменяете один элемент, вы «изменяете весь массив», как показано ниже.

Самодостаточный пример

public class Main { 

    public static void main(String[] args) { 
     // initializing array 
     Customer[] cc = new Customer[100]; 
     // filling array 
     Arrays.fill(cc, new Customer(1)); 
     // printing array 
     System.out.println(Arrays.toString(cc)); 
     // changing any array element 
     cc[0].setId(2); 
     // printing array again 
     System.out.println(Arrays.toString(cc)); 
    } 

    static class Customer { 
     int id; 
     int status; 

     Customer(int value) { 
      id = value; 
      status = 0; 
     } 
     // invoking this method on any object of the array will update all references 
     public void setId(int value) { 
      id = value; 
     } 

     @Override 
     public String toString() { 
      return String.format("Customer %d", id); 
     } 
    } 
} 

Выход

[Customer 1, Customer 1, Customer 1, Customer 1, Customer 1, Customer 1, Customer 1, Customer 1, etc...] 

[Customer 2, Customer 2, Customer 2, Customer 2, Customer 2, Customer 2, Customer 2, Customer 2, etc...] 
+0

Это интересная альтернатива. Было бы справедливо сказать, что это заполняет массив ссылками на один и тот же объект. Который вполне может быть тем, чего хочет OP, но может быть опасным для изменяемых объектов. –

+1

@RichardTingle спасибо за ваш комментарий. Я действительно понял, что формулировка в моем ответе была очень неоднозначной: это не 100 экземпляров, а, конечно, 100 ссылок на 1 экземпляр. – Mena

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