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 :

Problème pour lancer le programme


Sujet :

avec Java

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2012
    Messages : 85
    Points : 59
    Points
    59
    Par défaut Problème pour lancer le programme
    Bonjour,

    Je ne comprends pas pourquoi mon programme ne donne rien au lancement.
    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
    43
    44
    package tp1;
     
    public abstract class CaltoNew {
        public static double calculate(String arg){
            String nombre1="";
            double resultat=0;
            String nombre2="";
            String operation=null;
            String tab[]=arg.split(" ");
     
            for(String value : tab){
                if(!CheckIp.isNumeric(value)){
                    operation = new String(value);
                }
                else{
                    if(nombre1.isEmpty()){
                        nombre1 = new String(value);
                    }
                    else{
                        nombre2 = new String(value);
                    }
     
                }
                if(operation == "+"){
                    resultat = resultat + Integer.parseInt(nombre1) + Integer.parseInt(nombre2);
                }
                if(operation == "-"){                
                    resultat = resultat + Integer.parseInt(nombre1) - Integer.parseInt(nombre2);
                }
                if(operation == "/"){
                    resultat = resultat + Integer.parseInt(nombre1) / Integer.parseInt(nombre2);
                }
                if(operation == "*"){
                    resultat = resultat + Integer.parseInt(nombre1) * Integer.parseInt(nombre2);
                }
            }
            return resultat;
        }
     
        public static void main(String[] argu){
            String op = "17 + 3 * 5";
            System.out.println(calculate(op));
        }
    }
    La fonction isNumeric permet de vérifier si l'élément est bien un nombre.

    Quelqu'un saurait-il m'indiquer d'où peut venir le problème ?

    Merci d'avance pour votre aide.

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    ton programme ne "donne" pas rien, il affiche 0.0.

    Le premier problème qu'il y a c'est que tu testes l'égalité de tes opérateurs par un == : or, ceci compare des références, et le fait de faire operation = new String(value) fait que ces tests ne seront jamais vrais, donc la méthode renvoit la valeur initiale de resultat donc 0.0.

    Il faut comparer des instances de String avec la méthode equals de String.

    Mais ce n'est pas le seul problème de ton programme : après avoir corrigé ces tests, tu obtiendras une erreur à l'exécution.

    Il y a plusieurs problèmes majeurs dans ton algorithme :
    - tu calcules l'application d'un opérateur lorsque tu détectes l'opérateur, alors que les opérateurs que tu traites nécessitent 2 opérandes : donc tu lances ton calcul trop tôt, avant d'avoir décoder le second opérateur (qui la première fois est donc vide, donc non parsable en int, provoquant une exception)
    - même si tu corrigeais ton code pour appliquer l'opérateur lorsque tu as ton second opérande, lors du traitement du deuxième opérateur, tu auras un calcul faux, puisque tu ne recycles pas le résultat de l'opération précédente ; avec ton code, à part le premier nombre détecté qui ira dans nombre1, tout nouveau nombre ira dans nombre2, donc toute opération est faite en le premier nombre détecté, le dernier opérateur détecté, et le dernier nombre détecté
    - même si tu corrigeais ton code pour recycler le résultat du dernier calcul dans le premier opérande, il n'y a aucun traitement des priorités d'opérateurs, , tu obtiendras donc avec ta formule un résultat faux dans certains cas

    Pour réaliser un programme qui évalue une telle expression, il faut utiliser un parcourt d'arbre binaire, ce qui te permettra de gérer les priorités, et le recyclage de résultat intermédiaire, assez facilement.

    Pour commencer et t'entraîner à coder, tu devrais chercher plutôt à traiter une expression écrite en polonaise inverse, ton expression s'écrivant :

    5 3 * 17 +
    qui sera plus facile à parser :

    - soit, au fur et à mesure, puisque dans ce cas, les opérandes sont bien parsés avant l'opérateur
    - soit par un système de pile, on parse toute l'expression en empilant puis on dépile, et on calcule en fonction de ce qu'on dépile.




    Une dernière chose, qui n'empêche pas ton programme de tourner, mais qui n'est pas très judicieux : pourquoi une classe abstraite ?
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre chevronné

    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    974
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 974
    Points : 1 825
    Points
    1 825
    Par défaut
    Une première lecture du code : il n'y a pas d'import donc à quoi correspond : CheckIp ?

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par plawyx Voir le message
    Une première lecture du code : il n'y a pas d'import donc à quoi correspond : CheckIp ?
    J'ai supposé que s'il n'y avait pas d'erreur de compilation, cette classe (au nom étrange certes) existait dans le package tp1, donc pas besoin d'import.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Membre chevronné

    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    974
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 974
    Points : 1 825
    Points
    1 825
    Par défaut
    ok, mais d'autre part, comme je suis entièrement d'accord avec toi sur la façon de faire, j'aurais aimé avoir tout le code à lire

  6. #6
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par plawyx Voir le message
    ok, mais d'autre part, comme je suis entièrement d'accord avec toi sur la façon de faire, j'aurais aimé avoir tout le code à lire
    Certes, la méthode isNumeric de CheckIp pourrait ne pas faire ce qu'elle est censée faire ou mal le faire (ou causer une exception).

    C'est pareil, le fait de stocker les opérandes dans des String est assez étrange, mais comme de toute manière l'algo ne risque pas de marcher, je ne suis pas allé plus loin dans le détail.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  7. #7
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2012
    Messages : 85
    Points : 59
    Points
    59
    Par défaut
    Merci beaucoup pour vos réponses et votre aides !

    Alors comme vous le voyez j'ai vraiment du mal pour créer de bon algorithme qui tiennent la route. Je n'arrive pas a bien "organiser" et "structurer" mon algorithme. Je vais suivre vos conseils pas à pas.

    Pour ce qui est des priorités, je sais que ce programme ne les prend pas en comptes, c'était un tp où on nous demandait justement de ne pas les prendre en compte, et de créer un deuxième programme en les prenant en compte.

    Pour ce qui est de CheckIp j'ai juste pris la fonction isNumeric qui est dans CheckIp qui me permet de vérifier si un élément x est un nombre ou pas.

Discussions similaires

  1. Réponses: 3
    Dernier message: 02/02/2012, 14h14
  2. Problème pour lancer un programme
    Par lelfe95 dans le forum Débuter avec Java
    Réponses: 7
    Dernier message: 12/05/2011, 11h41
  3. Problème pour lancer phpmyadmin
    Par schtroumpf_farceur dans le forum Apache
    Réponses: 2
    Dernier message: 31/01/2006, 09h58
  4. Réponses: 3
    Dernier message: 06/01/2006, 15h05
  5. [Système]Problème pour lancer l'appli au démarrage
    Par CVERRIER3 dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 23/11/2005, 16h07

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