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

avec Java Discussion :

Multiplier un objet par un double.


Sujet :

avec Java

  1. #1
    Membre du Club
    Homme Profil pro
    Chercheur d'Emploi
    Inscrit en
    Février 2017
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'Emploi

    Informations forums :
    Inscription : Février 2017
    Messages : 86
    Points : 65
    Points
    65
    Par défaut Multiplier un objet par un double.
    Bonjour a tous. Me voila encore avec cette methode en c# que je retranscris en Java. Je pense voir le bout du tunnel mais il me reste encore 2-3 erreurs a commencé par celles-ci:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    double accelerationVector = -Vecteur2.Normalize(velocityVector) * frictionAcceleration + new Vecteur2(0, -gravity);
    positionVector += velocityVector * timeStep + 1 / 2 * accelerationVector * timeStep * timeStep;
    me sort comme erreur pour la ligne1:

    Code console : Sélectionner tout - Visualiser dans une fenêtre à part
    Error:(69, 41) error: bad operand type Vecteur2 for unary operator '---'

    et pour la ligne 2:

    Code console : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Error:(73, 46) error: bad operand types for binary operator '*'
    first type:  Vecteur2
    second type: double

    plutôt logique sauf que ces lignes marchent en c#:

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var accelerationVector = -Vector2.Normalize(velocityVector) * frictionAcceleration + new Vector2(0, -gravity);
    positionVector += velocityVector * timeStep + 1 / 2 * accelerationVector * timeStep * timeStep;


    Voici la classe Vecteur2 qui est une classe que j'ai écris en Java en prenant ce dont j'avais besoin de la methode Vector2 qui fait partie du langage c#:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    import java.lang.Math;
     
    public class Vecteur2 {
     
        double x;
        double y;
     
        private static Vecteur2 zeroVector = new Vecteur2(0f, 0f);
     
        public Vecteur2(double dX, double dY) {
            x = dX;
            y = dY;
        }
     
        public double LengthSquared() {
            return Math.pow(x, 2) + Math.pow(y, 2);
        }
     
        public static Vecteur2 TransformNormal(Vecteur2 normal, Matrix3x2 matrix) {
            normal.x = (normal.x * matrix.m11) + (normal.y * matrix.m21);
            normal.y = (normal.x * matrix.m12) + (normal.y * matrix.m22);
            return normal;
        }
     
        public static Vecteur2 Normalize(Vecteur2 value) {
            double val = 1.0f / (double) Math.sqrt((value.x * value.x) + (value.y * value.y));
            value.x *= val;
            value.y *= val;
            return value;
        }
     
        public static Vecteur2 Zero()
        {
            return zeroVector;
        }
     
        public double Length()
        {
            return (double)Math.sqrt((x * x) + (y * y));
        }
     
    }
    et enfin au cas ou je vous laisse le code de la méthode Vector2 c# : http://www.technologicalutopia.com/s...vector2.cs.htm

    Je me demande comment ça se fait qu'en c# on puisse utiliser des operateurs sur l'objet Vector2 comme ça et surtout comment faire la même chose en Java ? Et si ce n'est pas possible et qu'il faut
    que je crée des methodes du style "multiplie(double)" dans ma classe Vecteur2: Comment savoir avec quoi je remplis ces methodes ?

  2. #2
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut
    Je me demande comment ça se fait qu'en c# on puisse utiliser des operateurs sur l'objet Vector2 comme ça et surtout comment faire la même chose en Java ? Et si ce n'est pas possible et qu'il faut
    On ne surcharge pas les opérateurs en Java (oui on fait ça en C, mais je ne connais pas la syntaxe)
    que je crée des methodes du style "multiplie(double)" dans ma classe Vecteur2: Comment savoir avec quoi je remplis ces methodes ?
    Exactement. Et le contenu va dépendre de ce que tu dois faire ("multiplier un vecteur" par quelques chose, je pense qu'il faut surtout multiplier son intensité... etc.)
    "Le plug gros problème des citations trouvées sur internet, c'est qu'on ne peut jamais garantir leur authenticité"

    Confucius, 448 av. J-C

  3. #3
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 553
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 553
    Points : 21 609
    Points
    21 609
    Par défaut
    Hello,

    C++ et C# gèrent la redéfinition des opérateurs, comme + ou * ou l'opérateur unitaire préfixe -

    Java, non.

    Citation Envoyé par CoDuSu Voir le message
    Je me demande comment ça se fait qu'en c# on puisse utiliser des operateurs sur l'objet Vector2 comme ça et surtout comment faire la même chose en Java ?
    Il faut définir des méthodes qui font ça en lieu et place d'opérateurs.

    Citation Envoyé par CoDuSu Voir le message
    Et si ce n'est pas possible et qu'il faut que je crée des methodes du style "multiplie(double)" dans ma classe Vecteur2: Comment savoir avec quoi je remplis ces methodes ?
    C'est littéralement la même chose qu'on fasse ça en définissant des méthodes ou des opérateurs. Il n'y a tout simplement pas de différence.
    Si tu regardes le code C#, tu constateras que l'implémentation de la redéfinition des opérateurs, aurait tout aussi bien pu être des méthodes normales à la place, sans que ça ne change rien à rien. Ce qui en dit long sur l'intérêt réel de la redéfinition d'opérateurs.
    Tout fonctionne pareil, mais cela permet d'écrire des opérations d'ordre mathématique de manière plus compacte. Au prix d'avoir du coup des opérateurs qui apparaissent dans le code et dont le sens ne peut être connu avec certitude qu'en allant lire le code d'implémentation de la classe qui l'implémente. En résolvant d'abord soi-même l'ambiguïté de quelle est la classe à vérifier, bien entendu. Il ne manquerait plus que le langage vienne nous aider à faire les choses.

    Je recommande toutefois de ne pas suivre les choix retenus par l'implémentation de Vector2.
    L'effet des opérateurs est de modifier l'un des objets opérandes de l'opération. Dans le monde réel quand on multiplie 8 par 4, on ne change pas la valeur de 8 pour que ça devienne en réalité 32. 8 vaut toujours 8 et les opérandes restent entièrement inchangées. On dit qu'elles sont immutables, et Vector2 devrait l'être aussi, ça n'a aucun sens d'autoriser la modification de leur contenu. A la place le résultat d'une multiplication est une nouvelles valeur, et donc multiplier un vecteur devrait produire un nouveau vecteur.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. retour tableau d'objets par service web axis jboss
    Par TrollMaster dans le forum XML/XSL et SOAP
    Réponses: 6
    Dernier message: 27/11/2005, 21h45
  2. Multiplier une liste par 2
    Par mdswiuf dans le forum Prolog
    Réponses: 8
    Dernier message: 31/01/2005, 18h27
  3. [Socket] Envoi de texte et d'objets par socket
    Par ced dans le forum Entrée/Sortie
    Réponses: 7
    Dernier message: 05/08/2004, 09h07
  4. [ArrayList]transformer l'objet récupéré en double...
    Par snoop dans le forum Collection et Stream
    Réponses: 10
    Dernier message: 16/07/2004, 16h16
  5. [ JSP ][ Débutant ] Passage d'objet par un forward
    Par captainpouet dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 08/04/2004, 10h33

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