Problème Iterable Array

Résolu/Fermé
Hurobaki Messages postés 53 Date d'inscription dimanche 23 mars 2014 Statut Membre Dernière intervention 10 mars 2017 - 4 févr. 2016 à 13:36
Hurobaki Messages postés 53 Date d'inscription dimanche 23 mars 2014 Statut Membre Dernière intervention 10 mars 2017 - 4 févr. 2016 à 21:43
Bonjour à tous,

Voici mon problème :

public static void testGarage1() {
		Garage1 garage = new Garage1();

		garage.add(new Vehicule(5.7));
		garage.add(new Vehicule(6.2));
		garage.add(new Vehicule(8.5));
		garage.add(new Vehicule(5.9));
		garage.add(new Vehicule(4.5));
		System.out.println(garage);

		for(Vehicule vehicule : garage) {
			vehicule.faireLePlein();
			vehicule.rouler(Math.random() * 1000);
		}


Ma classe Garage1 :

import java.util.*;

public class Garage1 {
	
	private List<Vehicule> garage;
	
	public Garage1()
	{
		this.garage = new ArrayList<>();
	}
	
	public void add(Vehicule v)
	{
		this.garage.add(v);
	}


Mon problème se situe dans mon Main.java, au niveau de l'itération de la boucle for.
Je reçois l'erreur : Can only iterate over an array or an instance of java.lang.Iterable.

Je comprends que garage est une instance de ma classe Garage1 mais j'aimerai pouvoir parcourir la liste que contient justement cette classe.

Je ne vois pas trop comment contourner ce problème...

Merci d'avance à ceux qui pourront m'éclairer ! :D

2 réponses

KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
Modifié par KX le 4/02/2016 à 18:33
Bonjour,

Comme indiqué dans le message d'erreur, la boucle for-each ne peux itérer que sur des objets qui implémentent l'interface Iterable.
Il faudrait donc implémenter cette interface dans ta classe Garage1.
Le plus simple étant de réutiliser l'itérateur de ta liste.

public class Garage1 implements Iterable<Vehicule> {

    private List<Vehicule> garage;
    
    @Override
    public Iterator<Vehicule> iterator() {
        return garage.iterator();
    }
La confiance n'exclut pas le contrôle
0