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

AWT/Swing Java Discussion :

[Débutant]Problème chaine de caractères


Sujet :

AWT/Swing Java

  1. #1
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    150
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Novembre 2006
    Messages : 150
    Par défaut [Débutant]Problème chaine de caractères
    Bonjour à tous,
    voila, je veux créer un simple programme qui calcule à partir d'un angle min jusqu'à un max, avec un pas prédéfini, le cos le sinus et la tan de l'angle. J'ai donc un JtextArea au centre du programme, sur lequel j'affiche en théorie mes calculs sous la forme :
    "angle cos (angle) sin (angle) tan(angle)"
    [...]
    " dernier angle cos(dernier angle) etc ... "

    Pour cela on fait donc une boucle for :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for(angle=min;angle<=max;angle=angle+step)
    Ensuite on fait les calculs à l'aide de 3 méthodes cos sin et tan crée plus haut :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    public static double cos (double a){
            return cos (a) ;
    Pour le min, max, et le pas (step), j'ai mis 3 jTextField (numérotés 2, 3 et 4)

    Enfin je fais ce calcul si l'on clique sur le bouton "Go!" ...


    Voila la suite du code :

    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
    public void jButton1_actionPerformed(ActionEvent e) {
     
     
            double angle,step,min,max;
     
            jTextArea1.append(" DEGRES \t SIN \t COS \t TAN\n");
            jTextArea1.append("+---------------------------------------------------------------------+");
     
            min=Double.parseDouble(jTextField2.getText());
            max=Double.parseDouble(jTextField3.getText());
            step=Double.parseDouble(jTextField4.getText());
     
            for(angle=min;angle<=max;angle=angle+step)
            {
                double radian=angle*3.14159/180;
                jTextArea1.append("|  "+angle+" |  "+cos (radian)+" |  "+sin (radian)+" |  "+tan (radian)+" |  \n");
            }
        }

    Mon Probleme
    le programme n'affiche que "DEGRES SIN COS TAN" puis "+----+---------+-------+".
    Il n'exécute pas la boucle for et n'affiche aucin résultat.

    Merci pour vos réponses - je l'espère - nombreuses ...

  2. #2
    Membre expérimenté Avatar de jibbi
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    165
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 165
    Par défaut
    Bonjour

    Juste avant la boucle for, pour voir ce qui se passe ajoute :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    System.out.println("min: "+min + " max: " + max + " step: " + step);

  3. #3
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    150
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Novembre 2006
    Messages : 150
    Par défaut
    il affiche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java.lang.StackOverflowError
    A quoi cela peut-il etre du ?

  4. #4
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    150
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Novembre 2006
    Messages : 150
    Par défaut
    stack over flow c'est un dépassement de pile c'est bien ça ?
    comment cela se produit-il ?

  5. #5
    Membre expérimenté Avatar de jibbi
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    165
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 165
    Par défaut
    Quelles sont les valeur de départ pour chaque JtextField ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    min=Double.parseDouble(jTextField2.getText());
    max=Double.parseDouble(jTextField3.getText());
    step=Double.parseDouble(jTextField4.getText());
    Est-ce que tu utilise les fonctions cos(), sin() et tan() de la classe Math ?si oui ca marche bien comme ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    double min = 5;
            double max = 5000;
            double step = 2;
     
     
            for(double angle=min;angle<=max;angle=angle+step)
            {
                double radian=angle*3.14159/180;
               System.err.println("|  "+angle+" |  "+cos (radian)+" |  "+sin (radian)+" |  "+tan (radian)+" |  \n");
            }

  6. #6
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    150
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Novembre 2006
    Messages : 150
    Par défaut
    il y avait un probleme : la déclaration dans la boucle qui engendre un débordement de la pile. Je fais donc mes déclaration en dehors du for() mais ça ne marche toujours pas ...

  7. #7
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par olivier1209
    il y avait un probleme : la déclaration dans la boucle qui engendre un débordement de la pile. Je fais donc mes déclaration en dehors du for() mais ça ne marche toujours pas ...
    Quel est le nouveau code ? Et que veux-tu dire exactement par "ça ne marche pas" ???

    Citation Envoyé par jibbi
    Quelles sont les valeur de départ pour chaque JtextField ?
    +1

    a++

  8. #8
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    150
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Novembre 2006
    Messages : 150
    Par défaut
    j'ai toujours le meme message d'erreur stackoverflow et le code est
    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
    public void jButton1_actionPerformed(ActionEvent e) {
     
     
            double angle,step,min,max;
     
            jTextArea1.append(" DEGRES \t SIN \t COS \t TAN\n");
            jTextArea1.append("+---------------------------------------------------------------------+");
     
            min=Double.parseDouble(jTextField2.getText());
            max=Double.parseDouble(jTextField3.getText());
            step=Double.parseDouble(jTextField4.getText());
     
            System.out.println("min: "+min + " max: " + max + " step: " + step);
     
            double c,s,t;
            double radian;
     
                    for(angle=min;angle<=max;angle=angle+step)
            {
               radian=angle*3.14159/180;            
     
                c = cos(radian);
                s = sin(radian);
                t = tan(radian);
     
                jTextArea1.append("|  "+angle+" |  "+c+" |  "+s+" |  "+t+" |  \n");
            }
        }
    La valeur des jtextfield est initialement a 0. l'utilisateur peut la changer par la suite ...

  9. #9
    Membre éprouvé
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    83
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 83
    Par défaut
    Bonjour,

    Si le step est à 0 : la boucle ne s'arrête jamais ... c'est peut être la cause du StackOverFlow ???

    Y'a une trace plus complète que tu pourrais nous faire parvenir ?

    A+

  10. #10
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    150
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Novembre 2006
    Messages : 150
    Par défaut
    amusez-vous !

    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
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    package trigo;
     
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.text.DecimalFormat;
    import java.math.*;
     
    /**
     * <p>Titre : </p>
     *
     * <p>Description : </p>
     *
     * <p>Copyright : Copyright (c) 2007</p>
     *
     * <p>Société : </p>
     *
     * @author non attribuable
     * @version 1.0
     */
    public class CadreTrigo extends JFrame {
        public CadreTrigo() {
            try {
                jbInit();
            } catch (Exception ex) {
                ex.printStackTrace();
            }
            setSize(480,510);
            setVisible(true);
        }
     
        private void jbInit() throws Exception {
            this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
            this.getContentPane().setLayout(null);
            jLabel1.setFont(new java.awt.Font("Dialog", Font.BOLD, 15));
            jLabel1.setText("Trigo");
            jLabel1.setBounds(new Rectangle(58, 0, 51, 28));
            jLabel2.setText("min");
            jLabel2.setBounds(new Rectangle(42, 292, 27, 15));
            jLabel3.setText("max");
            jLabel3.setBounds(new Rectangle(134, 290, 29, 18));
            jLabel4.setText("step");
            jLabel4.setBounds(new Rectangle(225, 291, 28, 17));
            jScrollPane1.setBounds(new Rectangle(36, 35, 355, 249));
            jTextArea1.setEditable(false);
            jTextArea1.setText("");
            jButton1.addActionListener(new CadreTrigo_jButton1_actionAdapter(this));
            this.getContentPane().add(jLabel1);
            jButton1.setBounds(new Rectangle(331, 289, 60, 23));
            jButton1.setText("Go !");
            jTextField4.setText("0");
            jTextField4.setBounds(new Rectangle(256, 288, 39, 25));
            jTextField3.setText("0");
            jTextField3.setBounds(new Rectangle(166, 288, 41, 25));
            jTextField2.setText("0");
            jTextField2.setBounds(new Rectangle(73, 288, 43, 25));
            this.getContentPane().add(jTextField2);
            this.getContentPane().add(jTextField4);
            this.getContentPane().add(jButton1);
            this.getContentPane().add(jTextField3);
            this.getContentPane().add(jLabel2);
            this.getContentPane().add(jLabel3);
            this.getContentPane().add(jLabel4);
            this.getContentPane().add(jScrollPane1);
            jScrollPane1.getViewport().add(jTextArea1);
        }
     
        JLabel jLabel1 = new JLabel();
        JTextField jTextField2 = new JTextField();
        JTextField jTextField3 = new JTextField();
        JTextField jTextField4 = new JTextField();
        JButton jButton1 = new JButton();
        JLabel jLabel2 = new JLabel();
        JLabel jLabel3 = new JLabel();
        JLabel jLabel4 = new JLabel();
        JScrollPane jScrollPane1 = new JScrollPane();
        JTextArea jTextArea1 = new JTextArea();
        public static double sin (double a){
            return sin (a) ;
        }
        public static double cos (double a){
            return cos (a) ;
        }
        public static double tan (double a){
            return tan (a) ;
        }
     
     
     
     
     
        public void jButton1_actionPerformed(ActionEvent e) {
     
     
            double angle,step,min,max;
     
            jTextArea1.append(" DEGRES \t SIN \t COS \t TAN\n");
            jTextArea1.append("+---------------------------------------------------------------------+");
     
            min=Double.parseDouble(jTextField2.getText());
            max=Double.parseDouble(jTextField3.getText());
            step=Double.parseDouble(jTextField4.getText());
     
            System.out.println("min: "+min + " max: " + max + " step: " + step);
     
            double c,s,t;
            double radian;
            boolean erreur=false;
                    for(angle=min;angle<=max;angle=angle+step)
            {
               if(angle==90 || angle==-90) erreur=true;
     
                radian=angle*3.14159/180;            
     
                c = cos(radian);
                s = sin(radian);
                t = tan(radian);
     
    if (erreur) jTextArea1.append("|  "+angle+" |  "+c+" |  "+s+" |  INFINI |  \n");
     
            else    jTextArea1.append("|  "+angle+" |  "+c+" |  "+s+" |  "+t+" |  \n");
            }
        }
    }
     
     
    class CadreTrigo_jButton1_actionAdapter implements ActionListener {
        private CadreTrigo adaptee;
        CadreTrigo_jButton1_actionAdapter(CadreTrigo adaptee) {
            this.adaptee = adaptee;
        }
     
        public void actionPerformed(ActionEvent e) {
            adaptee.jButton1_actionPerformed(e);
        }
    }

  11. #11
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    150
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Novembre 2006
    Messages : 150
    Par défaut
    voila le code de la methode principale :

    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
    package trigo;
     
    public class Trigo {
        public Trigo() {
            try {
                jbInit();
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }
     
        public static void main(String[] args) {
            CadreTrigo trigo = new CadreTrigo();
        }
     
        private void jbInit() throws Exception {
        }
    }

  12. #12
    Membre éprouvé
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    83
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 83
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
        public static double sin (double a){
            return Math.sin (a) ;
        }
        public static double cos (double a){
            return Math.cos (a) ;
        }
        public static double tan (double a){
            return Math.tan (a) ;
        }
    comme ca c mieux tu verras !!

  13. #13
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    150
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Novembre 2006
    Messages : 150
    Par défaut
    quel est le nom de la méthode que je dois appeler ?
    java.maths ?

  14. #14
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par olivier1209
    j'ai toujours le meme message d'erreur stackoverflow
    Mais pourrais-ton l'avoir en entier... Généralement le stacktrace de l'exception est assez instructif sur l'origine de l'erreur...

    Citation Envoyé par olivier1209
    La valeur des jtextfield est initialement a 0. l'utilisateur peut la changer par la suite ...
    Mais quel valeur tu utilises lorsque tu as l'erreur ??? On n'arrive pas à la reproduire...

    Citation Envoyé par NicoWrmCorp
    Si le step est à 0 : la boucle ne s'arrête jamais ... c'est peut être la cause du StackOverFlow ???
    Mais normalement un StackOverFlow survient lors d'un code récursif et non pas itératif... et tu m'as mis sur la piste :

    Citation Envoyé par olivier1209
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    public static double cos (double a){
            return cos (a) ;
    Ta méthode se rappelle elle-même à l'infini...


    a++

    [edit] Oups ! Vachement grillé

  15. #15
    Membre éprouvé
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    83
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 83
    Par défaut
    C'est java.lang.Math

    Auparavant tes méthodes cos sin et tan bouclaient sur elles mêmes; d'où les StackOverFlow.

  16. #16
    Membre émérite Avatar de remika
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    806
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 806
    Par défaut
    Tu importes java.lang.Math, toutes les méthode sont statiques, d'ailleurs tu pourras y trouver Math.PI

    Grillé

  17. #17
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    150
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Novembre 2006
    Messages : 150
    Par défaut
    c'est vrai c bon ça marche merci beaucoup il ne me reste plus qu'à l'aranger quelque peu

    a+

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

Discussions similaires

  1. Problème chaine de caractère sous vista
    Par pinguipacman dans le forum Visual C++
    Réponses: 1
    Dernier message: 22/02/2008, 16h34
  2. [Format]Problème chaine de caractère
    Par e040098k dans le forum Access
    Réponses: 4
    Dernier message: 16/04/2007, 22h17
  3. problème chaine de caractère
    Par fabpeden dans le forum C
    Réponses: 6
    Dernier message: 26/03/2007, 16h16
  4. [débutante] problème d'insertion caractère '\'
    Par Mireyu_c dans le forum Langage SQL
    Réponses: 5
    Dernier message: 15/06/2006, 12h18
  5. Réponses: 5
    Dernier message: 04/09/2005, 12h34

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