salut,
j'ai ecri une fonction pour le calcul des ratios finaciers
mais le temps d'execution est assez elevé,
je cherche donc à optimisé le code java de telle maniere qu'il sera plus fiable et rapide,
voila la fonction
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
    /** ===>>> Fonction de Calcul de la Valeur du Ratio **/
    private void mCalculer_actionPerformed(ActionEvent e) {
 
        String Modele = mModeleDesc.getText();
        String Date_debut = mDateDebut.getText();
        String Date_Fin = mDateFin.getText();
        String Requete_Insert = RequeteInsert_Data_Ratio;
        String Values = "";
        Vector V_Error = new Vector();
 
        /** Initialisation de table des Erreurs **/
        InitTableRatiosErronés();
        mModelRatioErronés.chargerVector(V_Error, vRatioErronesCols,vRatioErroneClasses);
 
        if( !Modele.equals("") && !Date_debut.equals("") && !Date_Fin.equals("") ) {
 
            /** Controle Des valeurs de dates   **/
            ControleDate(Date_debut, Date_Fin);         
            int Begin_Date = Integer.parseInt(Date_debut.split("/")[2]);
            int End_Date = Integer.parseInt(Date_Fin.split("/")[2]);
 
            /** Test Sur l'existance d'au moins un Ratio **/
            if( mTableRatioTraitement.getRowCount() >= 1 ){ 
 
                /** ==>> Parcour de la Table des Ratios **/
                for( int i = 0; i < mTableRatioTraitement.getRowCount(); i++ ){
 
                    if( mTableRatioTraitement.getValueAt(i,0) != null ) {
 
                          boolean Choix = (Boolean)mTableRatioTraitement.getValueAt(i,0);
 
                          /** Test sur la selection  d'un Ratio et l'existance d'une Societe **/
                          if( Choix == true && mTableSocieteTraitement.getRowCount() > 0 ){
                                 String Code_Ratio = mTableRatioTraitement.getValueAt(i,1).toString();
 
                                /** ==>> Parcour de la Table Societe  **/
                                for( int j = 0; j < mTableSocieteTraitement.getRowCount(); j++){
 
                                    if( mTableSocieteTraitement.getValueAt(j,0) != null && (Boolean)mTableSocieteTraitement.getValueAt(j,0) == true){
 
                                        String Societe = mTableSocieteTraitement.getValueAt(j,1).toString();
                                        String Formule_Ratio = GetFormule_Ratio(Code_Ratio,Modele);
                                        int k = 0;
                                        goTo_While : while((Begin_Date + k) <= End_Date ) { //===>>> Marge des Dates : Insertion pour les differentes dates
 
                                            int exist = IsTrouve_Ratio_Societe(Modele,Societe,Code_Ratio,Integer.toString((Begin_Date + k)));
 
                                            /** ==>>> le Ratio n'est pas Calculé pour la societe **/
                                            if( exist == 0 ) {  
 
                                                Pattern pattern = Pattern.compile("("+Symbols+")|("+numbers+")|("+strings+")");
                                                Matcher matcher = pattern.matcher(Formule_Ratio);
                                                String Evaluer_Formule = "";
                                                String Date_Ratio = String.valueOf(Begin_Date + k);  
                                                double Valeur_Ratio = 0;
 
                                               /**  ===>>> Parcour de la Formule   **/    
                                                while ( matcher.find() ) { 
 
                                                   String Element = matcher.group();
                                                   String test_element = Element.trim().substring(0,1);
 
                                                   if( test_element.equals(":") ){
 
                                                          String val = GetValeur_Compte(Element.split(":")[1],Modele,Societe,Date_Ratio);
 
                                                          if ( val.equals("") ) {
                                                            Evaluer_Formule += "0.00";
                                                          } else {
                                                              Evaluer_Formule += val;
                                                          }
 
                                                   } else {
                                                        Evaluer_Formule += Element;
                                                   }
                                                }
 
                                                /**  Bibliothèque du Calcul  **/                                           
                                                Jep jep = new Jep();
                                                try {
 
                                                      Requete_Insert = RequeteInsert_Data_Ratio;
                                                      Values = "";
                                                      jep.parse(Evaluer_Formule);
                                                      String valeur = jep.evaluate().toString();
 
                                                      /**  ===>>> Cas Erreur de calcul   **/                                         
                                                      if( valeur.trim().equals("Infinity") || valeur.trim().equals("NaN") ){ 
 
                                                          Vector v = new Vector();
                                                          v.add(Code_Ratio);v.add(Societe);v.add(valeur);v.add("31/12/" +(Begin_Date + k));
                                                          V_Error.add(v);
                                                          k++;
                                                          continue goTo_While;
 
                                                      } else {
                                                          Valeur_Ratio = Double.parseDouble(valeur);
                                                          Values = " VALUES ("+Modele+",'"+Code_Ratio.trim()+"','"+Societe.trim()+"',TO_DATE('31/12/"+Date_Ratio.trim()+"','dd/mm/yyyy') ,"+Valeur_Ratio+")";
                                                          Requete_Insert += Values;
                                                         // System.out.print("\n Requete_Insert " + Requete_Insert + "\n\n");
                                                          boolean ok = mDBaccess.execute_req_insert_update_con_commit(Requete_Insert);
                                                         // System.out.print("\n okokokok " + ok + "\n\n");
                                                      }  
                                                 }catch(JepException ex){
                                                    System.out.print( ex.toString() + "*****" + ex.getMessage() );  
                                                 }
                                                  k++;
                                          } else {
                                              k++;
                                          }
 
                                      }// fin while  
                                   }
                                 } 
                               }
                       }
               }
            }
 
            /** Remplissage de la table Errors **/
            mModelRatioErronés.chargerVector(V_Error,vRatioErronesCols,vRatioErroneClasses);
            mCommun14.formatTableRows(mTableRatioErronés);
            mTableRatioErronés.getColumnModel().getColumn(0).setPreferredWidth(250);
            mTableRatioErronés.getColumnModel().getColumn(1).setPreferredWidth(250);
            mTableRatioErronés.getColumnModel().getColumn(2).setPreferredWidth(200);
            mTableRatioErronés.getColumnModel().getColumn(3).setPreferredWidth(200);
 
        } else {
            JOptionPane.showMessageDialog(this,"789");
            JOptionPane.showMessageDialog(this," Veuilliez Remplir Les Paramètres ","Avertissement",0);
        }
    }
Merci