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 fonction Math.pow


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2012
    Messages : 10
    Par défaut Problème fonction Math.pow
    Bonsoir a tous, j'ai un petit problème avec mon programme java, je souhaite transformer une chaine de caractère en un entier, pour avoir le bon positionnement des chiffres j'utilise la fonction Math.pow ...
    Or pour calculer j'ai une tonne d'erreur (18 en tout) qui me disent que mes variables i , res , signe etc... sont invalides, bref.. Voici mon code, si vous avez des suggestions à faire je suis preneur


    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
    import java.io.*;
    public class Exo2{
    	public static void main (String args[]){
    		String s="-3842";
    		int i=0 , res=0 , signe=0;
    		int p=(int)Math.pow(10, s.length-(i+1));
    		Sytem.out.println("L'ordinateur choisit une chaine de caractere :"+s+" a convertir en un entier");
    		System.out.println(Convertir(s));
     
    	}
     
     
    	public static int Convertir(String s) {
    		while (i<s.length) {
    			if(i==0&&s.charAt(0)='-'){
    				signe=-1;
    			}
     
    			else if(i==0&&s.charAt(0)='+'){
    				signe=1;
    			}
     
    			else {
    				res=res+s.charAt(i)*p;
    				}
     
    			i++;
     
    		}
     
    		res=res*signe;
    		return res;
     
    	}	
    }

  2. #2
    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
    Par défaut
    Je vois que tu utilises tes variables i, res et signe dans ta méthode Convertir alors qu'ils ne sont déclarés qu'au sein de la méthode main. Pour ça, ils faudraient les déclarer en variable de classe ou en paramètre de la fonction Convertir. Les messages d'erreurs qui sont affichés doivent surement être assez parlant à ce niveau.
    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/

  3. #3
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par suNiz Voir le message
    je souhaite transformer une chaine de caractère en un entier,
    Je suppose qu'il s'agit d'un exercice, sinon il fallait utiliser Integer.parseInt()

    Citation Envoyé par suNiz Voir le message
    pour avoir le bon positionnement des chiffres j'utilise la fonction Math.pow ...
    Mauvaise idée. Math.pow() travaille sur des flottants, pas des entiers. Il y a des risques d'erreur de précision, et puis il y a aussi la question des performances. Il vaut mieux multiplier le nombre en cours de construction par 10, à chaque chiffre.

    De toute façon, si tu n'as pas droit à Integer.parseInt() pour faire ça, tu n'as pas droit non plus à un truc qui te fournit les puissances de 10 sans réfléchir.

    Citation Envoyé par suNiz Voir le message
    Or pour calculer j'ai une tonne d'erreur (18 en tout) qui me disent que mes variables i , res , signe etc... sont invalides, bref..
    Rien à voir avec Math.pow().

    Tes variables sont déclarées dans main(), pas dans Convertir().
    Elles sont donc visibles dans main(), pas dans Convertir().

    Solution : Elles ne sont pas utilisées dans main(), ce n'est donc pas là qu'il fallait les déclarer, mais dans Convertir().

    Suggestion : les noms de méthodes devraient commencer par des minuscules. C'est convertir(), pas Convertir().
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    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
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Solution : Elles ne sont pas utilisées dans main(), ce n'est donc pas là qu'il fallait les déclarer, mais dans Convertir().
    En effet, c'était la troisième solution qui est la meilleure dans ton 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/

  5. #5
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2012
    Messages : 10
    Par défaut
    Ah oui, ça marche un peu mieux maintenant ...
    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
    import java.io.*;
    public class Exo2{
    	public static void main (String args[]){
    		String s="-3842";
    		System.out.println("L'ordinateur choisit une chaine de caractere :"+s+" a convertir en un entier");
    		System.out.println(convertir(s));
     
    	}
     
     
    	public static int convertir(String s) {
    		int i=0 , res=0 , signe=0;
    		int p=(int)Math.pow(10, (s.length-(i+1)));
     
    		while (i<s.length) {
    			if(i==0&&(s.charAt(0)='-')){
    				signe=-1;
    			}
     
    			else if(i==0&&s.charAt(0)='+'){
    				signe=1;
    			}
     
    			else {
    				res=res+s.charAt(i)*p;
    				}
     
    			i++;
     
    		}
     
    		res=res*signe;
    		return res;
     
    	}	
    }
    Par contre la condition && dans if, else if ne marche par avec les 'char' ? (d'apres le compilateur, non ..)

  6. #6
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par suNiz Voir le message
    Par contre la condition && dans if, else if ne marche par avec les 'char' ? (d'apres le compilateur, non ..)
    Si, mais = ne marche ni avec les chars, ni avec rien.

    = est l'opérateur d'affectation.
    L'opérateur d'égalité, c'est ==
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2012
    Messages : 10
    Par défaut
    Ah oui, j'avais pas fait attention à ce détail... Bon, apparement il ne reste plus qu'une seule erreur dans mon Math.pow ..
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	int p=(int)Math.pow(10, (s.length-(i+1)));
    le s.length ne semble pas être apprécié... :/

  8. #8
    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
    Par défaut
    Ton "parentesage" est un peu boiteux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(i==0&&(s.charAt(0)='-')){ ... }
    Quelque chose comme ceci c'est plus claire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if((i == 0) && (s.charAt(0) = '-')){ ... }
    Ensuite, tu n'utilises pas = comme il faut.
    = : assignation
    == : test d'égalité

    Donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if((i==0) && (s.charAt(0) == '-' )){ ... }
    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/

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

Discussions similaires

  1. Problème fonction pow()
    Par OPSulaf dans le forum Langage
    Réponses: 2
    Dernier message: 13/02/2015, 17h08
  2. Problème avec Math.Pow()
    Par darkloy dans le forum C#
    Réponses: 1
    Dernier message: 07/04/2012, 22h33
  3. Problème fonction Math.IEEERemainder
    Par Merlon dans le forum C#
    Réponses: 4
    Dernier message: 21/03/2008, 14h27
  4. probléme avec le fonction math.random()
    Par dv-2008 dans le forum Débuter avec Java
    Réponses: 7
    Dernier message: 19/03/2008, 20h32
  5. fonction math : pow()
    Par uriotcea dans le forum C++Builder
    Réponses: 12
    Dernier message: 05/10/2006, 11h05

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