Problème Iterable Array [Résolu/Fermé]

Signaler
Messages postés
53
Date d'inscription
dimanche 23 mars 2014
Statut
Membre
Dernière intervention
10 mars 2017
-
Messages postés
53
Date d'inscription
dimanche 23 mars 2014
Statut
Membre
Dernière intervention
10 mars 2017
-
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

Messages postés
16263
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
4 mars 2021
2 800
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
Messages postés
53
Date d'inscription
dimanche 23 mars 2014
Statut
Membre
Dernière intervention
10 mars 2017

Merci beaucoup pour ta réponse, j'y penserai les prochaines fois ... En tout cas ça marche impeccable !

Encore merci et bonne soirée !