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

  1. #1
    Candidat au Club
    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
    Points : 2
    Points
    2
    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
    Points : 13 670
    Points
    13 670
    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 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    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
    Points : 13 670
    Points
    13 670
    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
    Candidat au Club
    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
    Points : 2
    Points
    2
    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 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    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
    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
    Points : 13 670
    Points
    13 670
    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/

  8. #8
    Candidat au Club
    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
    Points : 2
    Points
    2
    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é... :/

  9. #9
    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
    Points : 13 670
    Points
    13 670
    Par défaut
    Citation Envoyé par suNiz Voir le message
    le s.length ne semble pas être apprécié... :/
    Javadoc. C'est un réflexe à prendre.
    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/

  10. #10
    Candidat au Club
    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
    Points : 2
    Points
    2
    Par défaut
    Il faut donc que j'utilise int length(s) ?

  11. #11
    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
    Points : 13 670
    Points
    13 670
    Par défaut
    Citation Envoyé par suNiz Voir le message
    Il faut donc que j'utilise int length(s) ?
    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/

  12. #12
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    Xoe,
    Citation Envoyé par suNiz Voir le message
    Il faut donc que j'utilise int length(s) ?
    Robin56 te l'a déjà rappelé : JavaDoc !
    Si les cons volaient, il ferait nuit à midi.

  13. #13
    Candidat au Club
    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
    Points : 2
    Points
    2
    Par défaut
    Merci beaucoup, mon programme est valide, reste plus qu'a regler le probleme de mon calcul, qui ne m'affiche pas du tout le bon resultat ^^

  14. #14
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Citation Envoyé par suNiz Voir le message
    Merci beaucoup, mon programme est valide, reste plus qu'a regler le probleme de mon calcul, qui ne m'affiche pas du tout le bon resultat ^^
    C'est parce que tu additionnes des chars et des ints sans te poser de question.

    - Regarde combien font 1 + '0'
    - Regarde quel est le code ASCII du caractère '0'
    => Donc le problème, c'est de transformer tes chars en ints.

    - Regarde à nouveau la table ASCII et constate que les chiffres de 0 à 9 sont dans l'ordre et consécutifs.
    - Déduis-en que la valeur numérique d'un char c qui représente un chiffre, est
    (ce qui est la même chose que
    )
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  15. #15
    Candidat au Club
    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
    Points : 2
    Points
    2
    Par défaut
    Thelvin, je vois de quoi tu veux parler, mais je ne comprends pas ou l'appliquer dans mon programme.. :/

  16. #16
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Citation Envoyé par suNiz Voir le message
    Thelvin, je vois de quoi tu veux parler, mais je ne comprends pas ou l'appliquer dans mon programme.. :/
    Chaque fois que tu as besoin de transformer un char en nombre....
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  17. #17
    Candidat au Club
    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
    Points : 2
    Points
    2
    Par défaut
    Donc si j'ai bien compris mon s.charAt(i) donne quelque chose sous forme de caractère (et non de nombre)

  18. #18
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Citation Envoyé par suNiz Voir le message
    Donc si j'ai bien compris mon s.charAt(i) donne quelque chose sous forme de caractère (et non de nombre)
    Oui... Comme son nom et sa documentation l'indiquent.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  19. #19
    Candidat au Club
    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
    Points : 2
    Points
    2
    Par défaut
    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
    import java.io.*;
    public class Exo2{
    	public static void main (String args[]){
    		String s="+10";
    		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 , lgtab=s.length();
    		while (i<lgtab) {
    			if((i == 0) && (s.charAt(0) == '-')){
    				signe=-1;
    			}
     
    			else if((i == 0) && (s.charAt(0) == '+')){
    				signe=1;
    			}
     
    			else {
    				res+=s.charAt(i)*(int)Math.pow(10, lgtab-(i));
    				}
     
    			i++;
     
    		}
     
    		res=signe*res;
    		return res;
     
    	}	
    }
    Oui mais apres un (int) devant s.charAt(i) ne suffit pas ?..

  20. #20
    Candidat au Club
    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
    Points : 2
    Points
    2
    Par défaut
    Je dis n'importe quoi! Enfaite j'ai juste besoin de mettre (s.charAt(i)-48)*....

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

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