2015-09-13 121 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应该回答这个问题,而不是这个答案。 –