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 :

Application pour les équations du second degré buguée


Sujet :

Android

Vue hybride

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

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

    Informations forums :
    Inscription : Avril 2012
    Messages : 26
    Par défaut Application pour les équations du second degré buguée
    Bonjour tout le monde!

    Alors voilà, ça fait quelques semaines que je m'essaye à la programmation pour android, et j'ai enfin réussi à faire quelque chose de plus ou moins fonctionnel: un programme qui calcule la ou les réponses à une équation du second degré

    AndroidEquationseconddegre.java
    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
    package com.android.equationduseconddegre;
     
    import android.app.Activity;
    import android.os.Bundle;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.EditText;
    import android.widget.TextView;
    import android.widget.Button;
    import java.lang.Math;
     
    public class AndroidEquationseconddegre extends Activity {
        /** Called when the activity is first created. */
     
        private EditText variableA;
        private EditText variableB;
        private EditText variableC;
        private float valeurA;
        private float valeurB;
        private float valeurC;
        private float delta;
        private Button BoutonCalc;
     
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
     
            variableA = (EditText) findViewById(R.id.ValNombreA);
            variableB = (EditText) findViewById(R.id.ValNombreB);
            variableC = (EditText) findViewById(R.id.ValNombreC);
            BoutonCalc = (Button) findViewById(R.id.BoutonCalculer);
     
            BoutonCalc.setOnClickListener(
            		new OnClickListener()
            		{
            			public void onClick(View v)
            			{
     
     
            			valeurA = Integer.parseInt(variableA.getText().toString());
            			valeurB = Integer.parseInt(variableB.getText().toString());
            			valeurC = Integer.parseInt(variableC.getText().toString());
     
            			delta = (valeurB * valeurB) - ( 4 * (valeurA * valeurC));
     
            			if (delta > 0)
            			{
            					((TextView)findViewById(R.id.Resultat)).setText("Il y a deux solutions: " + ((- valeurB + Math.sqrt(delta) / (2 * valeurA))) + " et " + ((- valeurB - Math.sqrt(delta) / (2 * valeurA))) + ".");					
    					}
     
            			else if (delta == 0)
            			{
            				((TextView)findViewById(R.id.Resultat)).setText("Il y a une solution: " + (- valeurB / (2 * valeurA)) + ".");
            			}
     
            			else
            			{
            				((TextView)findViewById(R.id.Resultat)).setText("Il n'y a pas de solution.");        				
            			}
     
     
            			}
     
    				});
            }
     
        }

    res/layout/main.xml
    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
    79
    80
    81
    82
    83
    84
    85
    86
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical" >
     
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content" >
     
            <TextView
                android:id="@+id/NombreA"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/TexteNombreA" />
     
            <EditText
                android:id="@+id/ValNombreA"
                android:layout_width="0dip"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:ems="10"
                android:inputType="numberSigned"
                android:hint="@string/ValeurA" >
     
                <requestFocus />
            </EditText>
     
        </LinearLayout>
     
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content" >
     
            <TextView
                android:id="@+id/NombreB"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/TexteNombreB" />
     
            <EditText
                android:id="@+id/ValNombreB"
                android:layout_width="0dip"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:ems="10"
                android:inputType="numberSigned"
                android:hint="@string/ValeurB" />
     
        </LinearLayout>
     
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content" >
     
            <TextView
                android:id="@+id/NombreC"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/TexteNombreC" />
     
            <EditText
                android:id="@+id/ValNombreC"
                android:layout_width="0dip"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:ems="10"
                android:inputType="numberSigned"
                android:hint="@string/ValeurC" />
     
        </LinearLayout>
     
        <Button
            android:id="@+id/BoutonCalculer"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="@string/BoutonCalc"/>
     
        <TextView
            android:id="@+id/Resultat"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:text="@string/Resultat"
            android:textSize="20dp" />
     
    </LinearLayout>
    res/values/strings.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <string name="app_name">Equation du second degré</string>
        <string name="BoutonCalc">Calculer</string>
        <string name="Resultat"/>
        <string name="TexteNombreA">Entrez la valeur de A  </string>
        <string name="TexteNombreB">Entrez la valeur de B  </string>
        <string name="TexteNombreC">Entrez la valeur de C  </string>
        <string name="ValeurA">Entrez A</string>
        <string name="ValeurB">Entrez B</string>
        <string name="ValeurC">Entrez C</string>
     
    </resources>

    Le problème, je n'arrive pas à mettre de sécurité en place pour empêcher le clic sur le bouton tant que les trois champs ne sont pas remplis. Quand on clique sur le bouton calculer, l'application plante. Eclipse me dit "unable to parse '' as integer".
    Il faut aussi que je mette en place une boucle pour empêcher la valeurA d'avoir la valeur 0 afin d'éviter le division par 0, mais c'est le même problème. Si quelqu'un peut m'orienter je lui serais très reconnaissant...

    Merci d'avance

  2. #2
    Membre prolifique
    Avatar de Ryu2000
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    10 244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 10 244
    Par défaut
    Dans le onClick fait des tests sur tes EditText avant d'essayer de parser/faire le calcul.
    Comme ça l'utilisateur peut cliquer sans que ça plante, par contre faut l'avertir d'entrer 3 nombres?

    Tu peux aussi forcer les EditText à pouvoir contenir uniquement des nombres et tu mets par défauts 0, ensuite tu mets un listener qui regarde dès que la valeure d'un Etittext change et si les 3 EditText contiennent un nombre tu enabled le bouton.

  3. #3
    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 : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    Par défaut
    En première opération de ton bouton, vérifie les champs.
    S'ils sont vides, s'ils sont remplis avec autre chose que des chiffres, [des choses non exploitables] ...
    Si tu passes tout ça, tu lances l'opé.

    Donc, grosso-modo, au début, fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    "".equals(monEditText.getText()); // pour la vérif non rempli
    "0".equals(monEditText.getText()); // pour la vérif du 0
    EDIT : grillé
    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

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2012
    Messages : 26
    Par défaut
    Merci pour les réponses mais on m'a orienté vers les try catch sur le tchat, et ça fonctionne

    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
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    package com.android.equationduseconddegre;
     
    import android.app.Activity;
    import android.os.Bundle;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.EditText;
    import android.widget.TextView;
    import android.widget.Button;
    import java.lang.Math;
     
    public class AndroidEquationseconddegre extends Activity {
        /** Called when the activity is first created. */
     
        private EditText variableA;
        private EditText variableB;
        private EditText variableC;
        private float valeurA;
        private float valeurB;
        private float valeurC;
        private float delta;
        private Button BoutonCalc;
     
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
     
            variableA = (EditText) findViewById(R.id.ValNombreA);
            variableB = (EditText) findViewById(R.id.ValNombreB);
            variableC = (EditText) findViewById(R.id.ValNombreC);
            BoutonCalc = (Button) findViewById(R.id.BoutonCalculer);
     
            BoutonCalc.setOnClickListener(
            		new OnClickListener()
            		{
            			public void onClick(View v)
            			{
     
            			try 
            			{
            				valeurA = Integer.parseInt(variableA.getText().toString());
    					} catch (Exception e)
    					{
    						valeurA = 1;
    						((EditText)findViewById(R.id.ValNombreA)).setHint("1");
     
    					}   			
     
            			try 
            			{
            				valeurB = Integer.parseInt(variableB.getText().toString());
    					} catch (Exception e)
    					{
    						valeurB = 1;
    						((EditText)findViewById(R.id.ValNombreB)).setHint("0");
     
    					}   
     
            			try 
            			{
            				valeurC = Integer.parseInt(variableC.getText().toString());
    					} catch (Exception e)
    					{
    						valeurC = 1;
    						((EditText)findViewById(R.id.ValNombreC)).setHint("0");
     
    					}   
     
            			delta = (valeurB * valeurB) - ( 4 * (valeurA * valeurC));
     
            			if (delta > 0)
            			{
            					((TextView)findViewById(R.id.Resultat)).setText("Il y a deux solutions: " + ((- valeurB + Math.sqrt(delta) / (2 * valeurA))) + " et " + ((- valeurB - Math.sqrt(delta) / (2 * valeurA))) + ".");					
    					}
     
            			else if (delta == 0)
            			{
            				((TextView)findViewById(R.id.Resultat)).setText("Il y a une solution: " + (- valeurB / (2 * valeurA)) + ".");
            			}
     
            			else
            			{
            				((TextView)findViewById(R.id.Resultat)).setText("Il n'y a pas de solution.");        				
            			}
     
     
            			}
     
    				});
            }
     
        }
    Mais si j'essaye de suivre le raisonnement que vous me donnez, ça aurait aussi fonctionné si j'avais fait ça?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public void onClick(View v)
    {
     
    "".equals(variableA.getText());
    "".equals(variableB.getText());
    "".equals(variableC.getText());
    "0".equals(variableA.getText());
     
    etc etc

  5. #5
    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 : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    Par défaut
    L'idée est de contrôler les données au lieu de les utiliser et de voir si ça casse (ce que tu fais avec les try ... catch ici).

    En supposant que les EditText ne peuvent contenir que des chiffres.
    Ainsi, tu ne devrais plus avoir d'exception.

    Si je reprends ton code, ça ferai un :
    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
     
    public void onClick(View v)
    	{
    		boolean wellFilled = areEditTextsWellFilled();
    		if (wellFilled)
    			{
    				// les calculs ...
    			}
    		else
    			{
    				// Signaler quelle est l'erreur
    			}
    	}
     
    private void areEditTextsWellFilled()
    	{
    	boolean wellFilled = false;
     
    	if ((! "".equals(variableA.getText()) && ! Integer.parseInt(variableA.getText()) != 0) || ! "".equals(variableB.getText()) || ! "".equals(variableC.getText()))
    		wellFilled = true;
     
    	return wellFilled;
    	}
    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

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2012
    Messages : 26
    Par défaut
    Ok je pense avoir compris, je trouve quand même les try un peu moins tirés par les cheveux. Jvais essayer de garder un max de poil sur la tête

    Merci bien, Résolu

    ( Au fait, je fais comment pour mettre en résolu? )

  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
    Par défaut
    Citation Envoyé par Shirase_Akira Voir le message
    ( Au fait, je fais comment pour mettre en résolu? )
    Tu cliques sur le bouton situé en bas de la discussion.
    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. Résoudre une équation du second degré
    Par Emmanuel Delahaye dans le forum Télécharger
    Réponses: 3
    Dernier message: 04/12/2011, 02h59
  2. Réponses: 2
    Dernier message: 11/08/2011, 15h52
  3. sos solveur Roe pour les équations de Saint Venant
    Par centkilo dans le forum Fortran
    Réponses: 2
    Dernier message: 04/03/2011, 19h27
  4. Virtualisation d'application pour les isoler
    Par Flavien06 dans le forum Virtualisation
    Réponses: 5
    Dernier message: 20/07/2010, 13h42
  5. Visual basic: algo résolvant une équation du second degré
    Par mauriiice dans le forum VB 6 et antérieur
    Réponses: 15
    Dernier message: 05/12/2005, 17h16

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