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

Smalltalk Discussion :

Deplacement entité sur un espace


Sujet :

Smalltalk

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    septembre 2009
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : septembre 2009
    Messages : 103
    Points : 38
    Points
    38
    Par défaut Deplacement entité sur un espace
    Bonjour à tous,

    je cherche à déplacer 60 personnes sur un espace séparé en 3 parties.

    Je fais cela :

    i:= 1.
    self popAgri timesRepeat:

    theCells at: [((i-1) \\ (theCells size)) +1].
    farmeri moveTo: theCells].

    En sachant qu'ici popAgri représente les 60 personnes.
    theCells correspond à mon espace. theCells size à la taille : 3.
    farmeri correspond à mes agriculteurs qui sont donc 60.

    Le probleme est que ça ne marche pas
    Lors de l'exécution il me dit que (i-1) \\ (theCells size) : non integer index...

    Merci pour votre aide, et bonne journée

  2. #2
    Membre régulier

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    août 2010
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : août 2010
    Messages : 22
    Points : 76
    Points
    76
    Par défaut
    tu as fait un mauvais copier/coller de ton code.
    j'ai du mal à comprendre du coup.
    peux-tu vérifier ?

  3. #3
    Membre éprouvé

    Homme Profil pro
    non
    Inscrit en
    mai 2008
    Messages
    395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : non

    Informations forums :
    Inscription : mai 2008
    Messages : 395
    Points : 1 109
    Points
    1 109
    Par défaut
    Tu t'en es sorti ?

    Le code qui était copié collé était-il bon finalement (pas d'erreur comme demandé par Milco ?) ?

    Pour moi l'erreur c'est que tu sembles essayer d'accéder à une collection (theCells) en lui passant un bloc au lieu d'un entier - d'où l'erreur "Non Integer Index".

    Il faut retirer les crochets et passer de [((i-1) \\ (theCells size)) +1] à (((i-1) \\ (theCells size)) +1).

    Le fait de rajouter des [ ] transforme ton objet en BlockClosure (en bloc quoi) et tu le passe en paramètre au at: pour accéder aux éléments de ta collection (paramètre qui devrait être un entier).

    Sauf que pour ça il faut être sûr que :

    - le code copié collé est correct
    - theCells est bien une collection - et donc le message at: doit prendre un entier en paramètre, ce qui serait cohérent avec ton erreur "Non Integer Index"

    Tiens nous au courant
    [|]

  4. #4
    Membre régulier

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    août 2010
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : août 2010
    Messages : 22
    Points : 76
    Points
    76
    Par défaut
    en complément, voici mes autres remarques :

    - il restera un crochet orphelin (c'est pourquoi je parle d'erreur de copier coller)

    - tu veux utiliser l'opérateur // ou \\ ??

    - d'expérience, timesRepeat: est rarement la solution à notre besoin

    - si tu veux boucler sur ta collection, c'est plutot un do:
    éventuellement un inject: into: (mais cette méthode récursive n'est pas à mettre entre toutes les mains)

    - je n'ai pas moveTo: dans mon smalltalk (enfin que sur des objets graphiques)
    donc je ne sais pas ce que tu veux faire à ce moment là

    - je ne vois pas d'incrémentation à ton indice
    de plus i-1 la première fois donnera 0.
    contrairement à Java , les indices commencent à 1

    Est-ce que ton besoin est d'éclater la collection de 60 éléments en trois "sous-collection" ?

  5. #5
    Membre éprouvé

    Homme Profil pro
    non
    Inscrit en
    mai 2008
    Messages
    395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : non

    Informations forums :
    Inscription : mai 2008
    Messages : 395
    Points : 1 109
    Points
    1 109
    Par défaut
    Citation Envoyé par milco Voir le message

    - je ne vois pas d'incrémentation à ton indice
    Bien vu

    Citation Envoyé par milco Voir le message
    de plus i-1 la première fois donnera 0.
    contrairement à Java , les indices commencent à 1
    Il rajoute un +1 : ((i-1) \\ (theCells size)) +1 évalue d'abord le résultat du \\.

    Il va peut-être refaire surface nous dire si on l'a bien aidé ou pas, pour une fois que ça bouge sur ce forum =p
    [|]

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    septembre 2009
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : septembre 2009
    Messages : 103
    Points : 38
    Points
    38
    Par défaut résolu
    Salut et merci de vos réponses.

    Comme vous vous en doutez, le temps de réponse étant un peu long sur ce forum , j'ai avancé et trouvé la solution.
    Celle ci se rapproche de ce que vous m'avez proposé

    Merci !

Discussions similaires

  1. [JpGraph] Utilisation sur mon espace personnel
    Par ouldfella dans le forum Bibliothèques et frameworks
    Réponses: 13
    Dernier message: 25/04/2006, 12h03
  2. contrôle de saisie sur un espace
    Par oceane751 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 12/01/2006, 12h04

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