2015-09-13 123 views
-1

我想用的for-each語法來寫一個for循環得到對象:編寫for-each循環,從一個ArrayList

for(Obj o : ArrayList<Obj>) 

如本例:

class Car{ 
    int number; 
    public Car(int num){ number = num; } 
    int getNumber(){ return this.number; } 
} 

class CarPark{ 
    ArrayList<Car> cars; 
    public CarPark(){ cars = new ArrayList<Car>(); } 
} 

public class Main{ 
    public static void main(String[] args){ 
     CarPark p = new CarPark(); 
     p.add(new Car(123)); 
     p.add(new Car(456)); 
     p.add(new Car(789)); 

     for(Car c : p.cars){ 
      System.out.println(c.getNumber()); 
     } 
    } 
} 

怎麼辦我寫循環?這個語法可能嗎?

+5

什麼問題?代碼看起來沒問題,並且您正在使用'替代語法'(每個循環都要求這樣做)。你唯一需要解決的就是用'p.cars.add'替換'p.add',但這不是循環的問題 –

回答

1

是的。你可以做到這一點。除了命名約定,一切似乎都很好。

現在你正在迭代使用foreach循環。

if (p.getCars() != null) { 
    for (Car car : p.getCars()) { 
     System.out.println(car.getCarNumber()); 
    } 
} 

如果你正在尋找一個傳統的for循環:

for (int i = 0; i < p.size(); i++) { 
    System.out.println(p.get(i).getNumber()); 
} 

foreach循環通常是最好的傳統風格。

+0

'carpark.getCars()'? 'p.get()'?你優化了你的想法中的問題.. ;-) –

+0

@DanielAlder'公共CarPark()',這讓我寫了:)這是一個錯字。現在編輯。儘管如此,謝謝你的發現。 –

+0

@downvoter,我們可以一起學習,如果你告訴我這個原因:) –

2

您的for-each循環沒有問題。

只有一點你必須修改。要將新對象Car添加到ArrayList,請使用p.cars.add()

public static void main(String[] args) { 
    CarPark p = new CarPark(); 
    p.cars.add(new Car(123)); 
    p.cars.add(new Car(456)); 
    p.cars.add(new Car(789)); 

    for (Car c : p.cars) { 
     System.out.println(c.getNumber()); 
    } 
} 

所以ArrayListcarsCarPark類對象p的成員,您可以通過p.cars訪問它。

-2

與Java 8,你可以使用一個簡單的lambda表達式:

p.cars.forEach(c -> System.out.println(c.getNumber())); 

這相當於你for -loop。

+0

@downvoter:我們不滿意你:答案爲問題已經解決的問題增加了一個有趣的新解決方案。 downvote應該回答這個問題,而不是這個答案。 –