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

API standards et tierces Java Discussion :

Erreur "Malformed expression: "(ERROR)"" ArrayList<maClasse> - BigDecimal


Sujet :

API standards et tierces Java

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    263
    Détails du profil
    Informations personnelles :
    Âge : 74
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 263
    Par défaut Erreur "Malformed expression: "(ERROR)"" ArrayList<maClasse> - BigDecimal
    Bonjour.
    J'ai une première classe 'maClasse1'
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public class maClasse1 
    {
        public BigDecimal puissance;
        ...
     
        public maClasse1()
        {
            puissance = new BigDecimal(0.0);
            puissance.setScale(3, BigDecimal.ROUND_HALF_UP);
            ...
        }
    }
    J'ai une deuxième classe contenant et remplissant une ArrayList<maClass1>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
            private static ArrayList<maClasse1> liste_PuissEnerg = new ArrayList<>();
        ...
        public ArrayList<maClass1>[] dresserListePuissEnerg(JTable tablePrinc) {
        ...
                if (noLigne_Liste >= limNoLigne)
                {
                    nouvDonnée = new maClasse1();
                    nouvDonnée.puissance = (BigDecimal) valeurPuissàPlacer;
                    ...
                    liste_PuissEnerg.add(nouvDonnée);
                    ...
        ...
    J'ai une troisième classe effectuant divers calculs à partir de quelques ArrayList de données.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        ...
            for (int i = 0 ; i <= longueurListe-1 ; i++)
            {   
                somEnerg = liste_PuissEnerg.get(i).puissance;
     
                if (liste_PuissEnerg.get(i).puissance.compareTo(puissàModulMax) != -1 &&
                    liste_PuissEnerg.get(i).puissance.compareTo(puissNomin)     != +1 )
                {   
                    somEnergQuartHor.add(liste_PuissEnerg.get(i).puissance);
        ...
    L'erreur qui se manifeste est
    .puissance = >Malformed expression: "(ERROR)"<
    Donc, lorsque je tente de simplement lire la valeur d'une variable BigDecimal dans un objet (de classe personnelle) d'une ArrayList de cette classe, j'obtiens une mention d'erreur, mais seulement lors de l'exécution du programme; pas lors de sa compilation.
    Pourtant, 'somEnerg' prend bien la bonne valeur qui se trouve dans 'liste_PuissEnerg.get(i).puissance'.
    Quelle erreur commets-je ?
    Pas trouvé dans How to use Java BigDecimal: A tutorial , ni dans Class BigDecimal , ni dans FAQs de Développez .
    Merci d'avance.
    Merci une fois de plus à Développez et à ses grosses têtes.

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 577
    Par défaut
    Citation Envoyé par Chavadam Voir le message
    Pourtant, 'somEnerg' prend bien la bonne valeur qui se trouve dans 'liste_PuissEnerg.get(i).puissance'.
    Probablement pas lorsque l'erreur arrive. Mais ça peut être le cas plusieurs fois avant que l'erreur arrive.

    A priori tu as probablement un pointeur null dans ta List, ou alors tu laisses i dépasser la véritable taille de la List.
    En fait, il y a forcément un moment où i va dépasser la taille de la List, et dans ce cas-là ton code ne rentre pas dans la boucle et n'essaie pas de faire get(i)... Mais si tu as laissé dans ton débuggeur une vue sur le get(i), cette vue va forcément faire une erreur à ce moment-là, c'est évident.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Tu peux nous donner le message d'erreur complet? C'est bizarre comme message runtime. La seule possibilité que je vois c'est que tu run dans un IDE, il y a des erreurs de compilation, et tu as dit à l'IDE "vas-y quand même". Du coup l'ide remplace les lignes erronées par

    throw new Error("Compilation error: "+messageDErreurCompilation");


    et tu ne vois que l'erreur de compilation à l'exécution.

    Et pour faciliter, cette boite dialogue a une case à cocher "ne plus me le demander" , histoire que tu run du code non compilable sans même t'en rendre compte.

  4. #4
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 577
    Par défaut
    C'est un message typique du debugger quand tu lui demandes d'inspecter une expression qui, quand on tente de l'évaluer, produit une exception.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    263
    Détails du profil
    Informations personnelles :
    Âge : 74
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 263
    Par défaut
    Chers Tchize_ et Thelvin,

    J'ai honte ...
    Trouvé en quelques secondes après un bon sommeil : Non pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            somEnerg.add(liste_PuissEnerg.get(i).puissance);
    mais bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            somEnerg = somEnerg.add(liste_PuissEnerg.get(i).puissance);
    C'est même pour une fois aussi évident que basique.
    Mais comme disait feu ma belle-mère :
    Un moment de honte ne dure jamais qu'un moment.
    Merci bien. Vite un bon week-end à l'extérieur ...

  6. #6
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 577
    Par défaut
    Mais bien sûr. On risque pas de voir le rapport avec la choucroute, mais content pour toi si tu as résolu ton problème.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 10/07/2009, 17h12
  2. [débutant] erreur "indice de liste hors limites(1)"
    Par lidouka dans le forum Langage
    Réponses: 2
    Dernier message: 13/12/2005, 14h31

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