2010-06-26 2 views
1

Мне нужна помощь в этом фрагменте кода.Доступ к объекту. Переменный в массиве объектов

public class ParkingLot { 

static int MAX = 5; 
static Car[] Slot = new Car[MAX]; 

public static void main(String[] args) { 


    Slot[0] = new Car("1234", "White"); 
    Slot[1] = new Car("5678", "Black"); 

} 

public static void Allot() { 
    for (int i = 0; i <= Slot.length; i++) { 
     System.out.println(Slot.getNo); 

    } 
} 

Я хранение Car объекта в Slot. Я хочу распечатать/получить доступ к No и Colour автомобиля, хранящегося в слоте. Как мне это сделать?

ответ

2

Ну, если car имеет общественную собственность, или метод общественного геттер (это предпочтительнее - getNumber() и getColour()), вы можете называть их в то время как итерация массив с для-каждого цикла:

for (Car car : slot) { 
    System.out.println(car.getColour()); 
} 

Обратите внимание, что я строчная slot - имена переменных в Java должно быть в нижнем регистре. Я также рекомендовал бы назвать массив с множественным именем, т. Е. slots.

Обратите внимание, что способ итерации, предоставляемый другими, возможен, но не рекомендуется для основного случая итерации всего массива. Effective Java (Bloch) рекомендует использовать петлю foreach, когда это возможно.

+0

umm, как работает (Автомобиль: слот)? – theTuxRacer

+0

Это «синтаксический сахар» - цикл итерации по всем элементам массива/коллекции 'slot'. Как правило, 'slot' должен реализовывать' Iterable', но это также верно для массивов. – Bozho

+1

Кроме того, имена методов также должны быть уменьшены. Метод «Allot()» следует переименовать в «allot()» – Michael

1

Использование [] обозначения:

public static void Allot() { 
    Car car; 
    for (int i = 0; i <= Slot.length; i++) { 
     // Get the car at this position in the array 
     car = Slot[i]; 

     // Make sure it isn't null, since the array may not have 
     // a full set of cars 
     if (car != null) { 
      // Use the car reference 
      System.out.println(car.getNo()); 
     } 
    } 
} 

(я взял на себя имя, которое getNo был метод, а не свойство.)

Например, Slot[0] дает первый Car, из которого вы можете получить доступ к , поэтому Slot[i] дает вам автомобиль на i-й позиции. (В приведенном выше примере я использовал временную переменную для хранения автомобиля, но вы можете напрямую использовать Slot[i].getNo(), это не имеет значения. Я просто не хотел повторять поиск массива, даже через HotSpot [Sun JVM] оптимизирует его ., даже если я)

+0

В своем случае я хотел бы добавить, если (Slot [я]! = NULL). – InsertNickHere

+0

@InsertNickHere: Да, хорошая идея. –

1

Извините за то, что так поздно. Я заметил, что в приведенных выше ответах что-то не хватает, так что вот полное решение проблемы.

Вот класс ParkingLot с вызовом метода Allot().

общественного класса {парковке

static int MAX = 5; 
static Car[] Slot = new Car[MAX]; 

public static void main(String[] args) { 

    Slot[0] = new Car("1234", "White"); 
    Slot[1] = new Car("5678", "Black"); 

    Allot(); 

} 

public static void Allot() { 

    for (int i = 0; i < Slot.length; i++) { 

     if (Slot[i] != null) { 
      System.out.println(Slot[i].getNo()+" , "+Slot[i].getColor()); 
     } 
    } 
} 

}

А класс автомобиля с getNo() и GetColor() методы.

класс автомобилей общественного {

private String Number; 
private String Color; 

Car (String Number, String Color){ 
    this.Number = Number; 
    this.Color = Color; 

} 

public String getNo(){ 
return Number; 
} 

public String getColor(){ 
    return Color; 
} 

}

0
class Car{ 
    String number; 
    String color; 

    public Car(String number, String color) { 
     this.number = number; 
     this.color = color; 
    } 

    @Override 
    public String toString() { 
     return "Car{" + 
       "number='" + number + '\'' + 
       ", color='" + color + '\'' + 
       '}'; 
    } 
} 

class Test{ 
    static int MAX = 5; 
    static Car[] Slot = new Car[MAX]; 

    public static void main(String[] args) { 
     Slot[0] = new Car("1234", "White"); 
     Slot[1] = new Car("5678", "Black"); 

     for (Car car : Slot) 
      System.out.println(car); 
    } 

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