IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

Boucle dite "for each"


Sujet :

Langage Java

  1. #1
    Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Juillet 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2011
    Messages : 2
    Points : 3
    Points
    3
    Par défaut Boucle dite "for each"
    J'ai vu que depuis le JDK 5.0 on peut appliquer ce type de boucle ( for ( char c : mot ) ) sur un élément de type chaîne ( String ).

    Voici mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public class TstString 
    {
    	public static void main(String[] args) 
    	{
    		String Mot;
    		System.out.print("Donnez un mot :");
    		String mot=Clavier.lireString();
    		System.out.println("voici votre mot en colonne :");
    		for (char c : mot)
    			System.out.println(c);
    	}
     
    }
    J'ai une erreur à la ligne 9 : Can only iterate over an array or an instance of
    java.lang.Iterable

    Auriez vous une idée ?
    Je travaille sous Eclipse JA-SE 1.6

    Merci d'avance

  2. #2
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    Comme indiqué, le "for-each" ne peut être utilisé qu'avec un tableau ou une classe qui implémente l'interface Iterable.

    Or ce n'est pas le cas de la classe String !


    Une solution serait de récupéré le tableau de char correspondant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for (char c : mot.toCharArray())
    a++

  3. #3
    Modérateur

    Avatar de Robin56
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juin 2009
    Messages
    5 297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juin 2009
    Messages : 5 297
    Points : 13 670
    Points
    13 670
    Par défaut
    Pourquoi t'embêter avec cette notation, un String ce n'est juste qu'un "tableau" de char donc tu peux faire ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for (int i = 0 ; i < mot.length() ;i++)
        System.out.println(mot.charAt(i));
    Pour ton erreur, elle signifie qu'une notation de ce style n'est possible que sur un objet implémentant Iterator. Pour la classe String, ce n'est pas le cas.
    Responsable Java de Developpez.com (Twitter et Facebook)
    Besoin d'un article/tutoriel/cours sur Java, consulter la page cours
    N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
    --------
    Architecte Solution
    LinkedIn : https://www.linkedin.com/in/nicolascaudard/

  4. #4
    Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Juillet 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2011
    Messages : 2
    Points : 3
    Points
    3
    Par défaut Merci pour ces réponses
    Oui effectivement il me semblait bien comprendre le message d'erreur comme ça et j'ai effectivement testé la boucle classique.

    Ce qui m'a mit le doute c'est que je trouve ça à la page 250-251 du livre Programmer en Java de Claude Delannoy Edition Eyrolles

    Je cite l'extrait de son livre page 251 :
    La boucle dite "for each", introduite par le JDK 5.0, ... , peut s'appliquer à une chaîne. Par exemple, si mot est une chaîne, on pourra parcourir ainsi ses différents caractères :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for (c : mot)
    // Faire quelque chose avec c.
    Et à la page 250 il prend l'exemple de mot de type String ( Objet de String )

    C'est donc une erreur de sa part ?

    Merci encore pour vos réponses rapides.

  5. #5
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par sebcbien11290 Voir le message
    C'est donc une erreur de sa part ?
    Il y a des chances oui... à moins qu'il ne déclare la variable mot comme un char[]


    a++

  6. #6
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Points : 5 943
    Points
    5 943
    Par défaut
    Citation Envoyé par sebcbien11290 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for (c : mot)
    // Faire quelque chose avec c.
    Ce code est également faux du fait qu'il ne déclare pas le type de l'élément, il devrait être :
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. insertion de données issues d'un array sans boucles de type for each ou while.
    Par piotrowski-s dans le forum PHP & Base de données
    Réponses: 0
    Dernier message: 05/09/2012, 11h27
  2. [Toutes versions] Boucle de type For Each en Dynamique
    Par L'Albatros dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 02/05/2012, 09h51
  3. problème avec boucle Sub et For each
    Par lbroc84 dans le forum VBScript
    Réponses: 1
    Dernier message: 23/08/2011, 19h18
  4. Boucle imbriquée avec for each et while
    Par guen dans le forum Access
    Réponses: 7
    Dernier message: 01/03/2007, 17h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo