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

Android Discussion :

Additionner les chiffres du résultat d'une addition


Sujet :

Android

  1. #21
    Membre confirmé
    Inscrit en
    Novembre 2010
    Messages
    154
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 154
    Par défaut
    Merci beaucoup Joel pour ta réponse.
    J'ai modifié un peu le code en fonction, surtout le doublon total2 que j'ai transformé en a2.
    Je ne pense pas que ce soit la meilleure façon de nommer.

    Maintenant j'ai le résultat qui s'affiche dans le TextView.
    Par contre, je n'obtiens pas encore un résultat à 1 chiffre uniquement.
    Par exemple si je tape 11+11+2222 j'obtiens 12 dans le résultat au lieu de 3.

    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    public class Calcul extends Activity {
     
    	private EditText firstNumber, secondNumber, thirdNumber;
    	private TextView total;
    	private TextView total2;
    	private Button addButton;
     
        @Override
        public void onCreate(Bundle savedInstanceState) {
    	    super.onCreate(savedInstanceState);
    	    setContentView(R.layout.activity_calcul);
     
    	    firstNumber = (EditText) findViewById(R.id.firstNumber);
    	    secondNumber = (EditText) findViewById(R.id.secondNumber);
    	    thirdNumber = (EditText) findViewById(R.id.thirdNumber);
    	    addButton = (Button) findViewById(R.id.addButton);
    	    total = (TextView) findViewById(R.id.total);
    	    total2 = (TextView) findViewById(R.id.total2);
     
    	    addButton.setOnClickListener(new View.OnClickListener() {
    	        @Override
    	        public void onClick(View v) {
    	            String firstNumberResult = firstNumber.getText().toString();
    	            String secondNumberResult = secondNumber.getText().toString();
    	            String thirdNumberResult = thirdNumber.getText().toString();
     
    	            Integer totalResult = Integer.parseInt(firstNumberResult) + Integer.parseInt(secondNumberResult)+ Integer.parseInt(thirdNumberResult);        
     
     
    	            total.setText("Total = " + Integer.toString(totalResult));
     
     
    	            int a = totalResult;
    	            int a2 = 0;
    	            //Transformer l'entier en String
    	            String as = Integer.toString(a);
    	            //Effectuer la somme de tous les éléments de String
    	            for(int i = 0; i < as.length(); i++){
    	            	a2 += Integer.parseInt(as.substring(i, i+1));
    	            }
     
    	            total2.setText("Total = " + Integer.toString(a2));
     
    	        }
    	    });
        }
     
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.calcul, menu);
            return true;
        }
     
    	public EditText getFirstNumber() {
    		return firstNumber;
    	}
     
    	public EditText getSecondNumber() {
    		return secondNumber;
    	}
     
    	public EditText getThirdNumber() {
    		return thirdNumber;
    	}
     
    	public Button getAddButton() {
    		return addButton;
    	}
     
    	public TextView getTotal() {
    		return total;
    	}
     
    	public TextView getTotal2() {
    		return total2;
    	}
     
    }

  2. #22
    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 : 56
    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
    Billets dans le blog
    2
    Par défaut
    Parce que tu cherches à avoir la somme des chiffres tant que le nombre résultant de la somme fait plus de 2 chiffres... voir pour ça l'algorithme récursif donné dans le post de nicroman, ou faire une boucle tant que a2 (et non, ce n'est pas nom significatif.) est supérieur à 9, ou que sa représentation String est plus longue que 1.

    Par exemple, sur la base de ton code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    int calculSommeDesChiffres = nombre;
    for(String stringNombre = Integer.toString(nombre); stringNombre.length()>1; stringNombre = Integer.toString(calculSommeDesChiffres)) {
    	            //Effectuer la somme de tous les éléments de String
                        calculSommeDesChiffres = 0;
    	            for(int i = 0; i < stringNombre.length(); i++){
    	            	calculSommeDesChiffres += Integer.parseInt(stringNombre.substring(i, i+1));
    	            }
    }
    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. #23
    Modérateur
    Avatar de MasterMbg
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2011
    Messages
    719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Kinshasa

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2011
    Messages : 719
    Par défaut
    REMARQUE :
    Citation Envoyé par joel.drigo Voir le message
    Tu déclares une variable locale par int total2 = 0; qui cache la variable de classe private TextView total2;.
    Donc quand tu fais total2.setText("Total = " + Integer.toString(total2)); un peu plus loin dans le code, le total2 surlequel tu invoques setText est un int, qui n'a pas de méthode setText (ce qui dit le message).
    RECOMMANDATION :
    Citation Envoyé par joel.drigo Voir le message
    D'où l'importance de prendre l'habitude d'avoir des variables dont le nom ait un sens, ce qui limite ce genre de "doublon" (par exemple, private TextView total2TextView;). Pour éviter l'erreur, tu peux préciser que tu veux appeler setText sur la variable de classe, tu peux ajouter this. devant
    joel.drigo aurait tout dit
    Plus tu apprends sérieusement, plus tu te rapproches d'un savoir noble. Une chose est certaine, les difficultés ne s'écarteront de ton chemin...

    Tu es nouveau dans le développement Android, la page des COURS est là pour te faciliter la vie
    Tu peux trouver la réponse à ta question dans la FAQ
    Retrouvez mon tutoriel sur la consommation des services web SOAP
    Pense à voter positivement en appuyant sur en bas à droite de la réponse qui t'a donné une piste de solution.

  4. #24
    Modérateur
    Avatar de Hizin
    Homme Profil pro
    Développeur mobile
    Inscrit en
    Février 2010
    Messages
    2 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    Par défaut
    Pour ce problème en particulier, je rajouterai que les IDE possèdent un warning "la variable masque une variable de plus grande portée" qu'il est très recommandé d'activer.
    C'est Android, PAS Androïd, ou Androïde didiou !
    Le premier est un OS, le second est la mauvaise orthographe du troisième, un mot français désignant un robot à forme humaine.

    Membre du comité contre la phrase "ça marche PAS" en titre et/ou explication de problème.

    N'oubliez pas de consulter les FAQ Android et les cours et tutoriels Android

  5. #25
    Membre confirmé
    Inscrit en
    Novembre 2010
    Messages
    154
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 154
    Par défaut
    Merci beaucoup beaucoup à tous pour votre aide.
    J'avance beaucoup et vous me faites bien réfléchir. J'ai compris ce qu'il faut faire mais je n'arrive pas à le faire. J'ai essayé toutes sorte de solutions (que je n'ose pas poster ) ... mais en vain.

    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    public class Calcul extends Activity {
     
    	private EditText firstNumber, secondNumber, thirdNumber;
    	private TextView total;
    	private TextView total2;
    	private Button addButton;
     
        @Override
        public void onCreate(Bundle savedInstanceState) {
    	    super.onCreate(savedInstanceState);
    	    setContentView(R.layout.activity_calcul);
     
    	    firstNumber = (EditText) findViewById(R.id.firstNumber);
    	    secondNumber = (EditText) findViewById(R.id.secondNumber);
    	    thirdNumber = (EditText) findViewById(R.id.thirdNumber);
    	    addButton = (Button) findViewById(R.id.addButton);
    	    total = (TextView) findViewById(R.id.total);
    	    total2 = (TextView) findViewById(R.id.total2);
     
    	    addButton.setOnClickListener(new View.OnClickListener() {
    	        @Override
    	        public void onClick(View v) {
    	            String firstNumberResult = firstNumber.getText().toString();
    	            String secondNumberResult = secondNumber.getText().toString();
    	            String thirdNumberResult = thirdNumber.getText().toString();
     
    	            Integer totalResult = Integer.parseInt(firstNumberResult) + Integer.parseInt(secondNumberResult)+ Integer.parseInt(thirdNumberResult);                    
     
    	            total.setText("Total = " + Integer.toString(totalResult));
     
     
    	            int nombre = 0;
    				int calculSommeDesChiffres = nombre;
    	            for(String stringNombre = Integer.toString(nombre); stringNombre.length()>1; stringNombre = Integer.toString(calculSommeDesChiffres)) {
    	            	            //Effectuer la somme de tous les éléments de String
    	                                calculSommeDesChiffres = 0;
    	            	            for(int i = 0; i < stringNombre.length(); i++){
    	            	            	calculSommeDesChiffres += Integer.parseInt(stringNombre.substring(i, i+1));
     
    	            	            	total2.setText("Totale = " + Integer.toString(calculSommeDesChiffres));   
    	            	            }
    	            }                      	                     
    	        }
    	    });
        }
     
    	public EditText getFirstNumber() {
    		return firstNumber;
    	}
     
    	public EditText getSecondNumber() {
    		return secondNumber;
    	}
     
    	public EditText getThirdNumber() {
    		return thirdNumber;
    	}
     
    	public Button getAddButton() {
    		return addButton;
    	}
     
    	public TextView getTotal() {
    		return total;
    	}
     
    	public TextView getTotal2() {
    		return total2;
    	}
    Avec ce code j'obtiens le résultat le la 1ère addition dans le TextView total.
    Mais je n'arrive pas à faire et intégré cet algorithme récursif.
    Dans ce code, j'ai recopié celui de nicroman et ajouter la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    total2.setText("Totale = " + Integer.toString(calculSommeDesChiffres));
    Là je suis perdu et désespéré

  6. #26
    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 : 56
    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
    Billets dans le blog
    2
    Par défaut
    Salut,

    En l'occurence tu n'as pas utilisé l'algorithme récursif de @nicroman, mais l'algorithme itératif que je t'avais donné, dérivé de ton algorithme (personnellement, je préfère la première version entièrement numérique que j'ai proposée, pour un problème d'occupation mémoire principalement).

    Mais il y a un problème avec la position de la ligne total2.setText("Totale = " + Integer.toString(calculSommeDesChiffres)); : elle ne doit pas être dans la boucle de calcul, mais après, quand le calcul est terminé. Dans ton cas, tu mets le résultat dans tolal2 à chaque itération, ce qui est inutile, et qui en plus fera qu'on ne le verra pas si le résultat est inférieur à 10 (puisqu'on ne rentre pas dans les boucles dans ce cas).

    Donc mets cette ligne après le for de premier niveau :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    int nombre = 0;
    int calculSommeDesChiffres = nombre;
    for(String stringNombre = Integer.toString(nombre); stringNombre.length()>1; stringNombre = Integer.toString(calculSommeDesChiffres)) {
        //Effectuer la somme de tous les éléments de String
       calculSommeDesChiffres = 0;
       for(int i = 0; i < stringNombre.length(); i++){
          calculSommeDesChiffres += Integer.parseInt(stringNombre.substring(i, i+1));
          // NON PAS ICI total2.setText("Totale = " + Integer.toString(calculSommeDesChiffres));   
       }
    }                      	         
    total2.setText("Totale = " + Integer.toString(calculSommeDesChiffres));    // là, le résultat à afficher est calculé
    Ensuite, tu a mis 0 dans nombre, donc tu calcules la somme des chiffres de 0, ce qui devrait faire 0, mais comme "0" est de longueur 1, donc <=1, on ne rentre même pas dans la première boucle, donc forcément pas dans la seconde, donc on n'exécute jamais le setText(). Si tu déplaces le setText comme j'ai indiqué ci-dessus, tu y verras 0.

    Ensuite, il faut que tu fasses le calcul sur la variable qui contient le résultat de ton calcul : totalResult. Moi, j'avais mis "nombre" en exemple, qu'il ne fallait pas copier/coller tel quel, mais plutôt dans l'idée d'avoir une méthode spécifique comme ça (d'ailleurs, je me demande si tu as compris ce que ça faisait : c'est important que tu comprennes et que tu ne reprennes pas le code directement comme ça, justement pour pouvoir l'adapter au besoin) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    private int sommeDesChiffres(int nombre) {
       int calculSommeDesChiffres = nombre;
       for(String stringNombre = Integer.toString(nombre); stringNombre.length()>1; stringNombre = Integer.toString(calculSommeDesChiffres)) {
           //Effectuer la somme de tous les éléments de String
          calculSommeDesChiffres = 0;
          for(int i = 0; i < stringNombre.length(); i++){
             calculSommeDesChiffres += Integer.parseInt(stringNombre.substring(i, i+1)); 
          }
       }   
       return calculSommeDesChiffres;                   	
    }
    Donc si maintenant tu utilises la bonne variable de ton code, tu devrais avoir ça (à la place de toute la séquence de code dont je parle) (attention, je ne connais pas la programmation Android, et les problématiques de thread graphique/pas graphique spécifiques à cet environement, qui pourrait y avoir dans ton code) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    total2.setText("Totale = " + sommeDesChiffres( totalResult ));
    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. #27
    Membre confirmé
    Inscrit en
    Novembre 2010
    Messages
    154
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 154
    Par défaut
    Merci beaucoup Rodrigo.
    J'ai compris un peu plus encore
    Mais pas encore assez pour résoudre tout

    J'ai une erreur sur la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private int sommeDesChiffres(int nombre) {
    Elle est soulignée. Je pense que c'est parce que je n'ai plus la ligne
    Donc il ne sait plus ce qu'est "nombre"
    Exact ?

  8. #28
    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 : 56
    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
    Billets dans le blog
    2
    Par défaut
    Non : c'est une définition de méthode, et nombre est bien déclaré en paramètre dans sa signature : private int sommeDesChiffres(int nombre).

    Si c'est souligné en rouge, alors tu as un message associé (dans un tooltip) qui te dit quel est le problème.
    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.

Discussions similaires

  1. Avoir les 4 derniers résultats sur une grande table
    Par Sam31000 dans le forum Requêtes
    Réponses: 5
    Dernier message: 22/08/2012, 13h52
  2. Mettre tous les chiffres en indices sur une colonne
    Par ledisciple dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 30/08/2011, 15h29
  3. Réponses: 2
    Dernier message: 17/11/2010, 19h55
  4. Réponses: 11
    Dernier message: 14/10/2008, 10h21
  5. Compter les lignes du résultat d'une requete
    Par mfavier dans le forum ASP
    Réponses: 4
    Dernier message: 30/06/2006, 21h05

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