Partage
  • Partager sur Facebook
  • Partager sur Twitter

Valeur de retour d'une méthode

Sujet résolu
    27 mai 2019 à 13:46:13

    Bonjour à tous, sur le papier, une question simple, mais en pratique j'ai quelques difficultés à obtenir ce que je veux.

    J'ai un main et 2 méthodes:

    public static double remplir_data(double data,int monCompteur)

    Dans mon main, j'envoie des données à la 1ère méthode.

    Ces données sont stockées dans une arrayList.

    static ArrayList<Double> mesData = new ArrayList<>();
    
    mesData.add(data);
    


    Une fois cette méthode appelé n fois (on va dire 50 fois pour l'exemple),

    je fais ensuite appel à ma 2 ème méthode qui fait un calcul et qui renvoie le resultat.

    public static double ecart_type(ArrayList<Double> data_1m)
    

    Question: Comment récupérer ce résultat dans mon main?

    Sur le principe, 'ecart_type(maListe)' fonctionnerai mais non, puisqu'il faut d'abord passer par ma 1 ère méthode afin d'avoir toutes les valeurs dans l'ArrayList.

    Ainsi, pouvez vous m'aiguillez sur la démarche à entreprendre?

    Si le sujet n'est pas assez clair, n'hésitez pas à me demander des explications.

    Merci d'avance!


    • Partager sur Facebook
    • Partager sur Twitter
      27 mai 2019 à 16:59:44

      bonjour,

      La liste  à remplir peut être initialisée comme attribut de classe.ainsi la seconde méthode invoquera directement la liste construite par la méthode 1

      class Main{
      
       private static ArrayList<Double> mesData = new ArrayList<>();
      }

      pour remplir la liste

      public static void remplir_data(double data,int monCompteur){
      //parcours
      mesData.add( data );
      
      }

      la méthode calculant l'écart type n'aura plus besoin d'une liste en paramètre.


      • Partager sur Facebook
      • Partager sur Twitter
        28 mai 2019 à 8:19:08

        Bonjour Armel.mc,

        Merci de ta réponse!

        Mais je ne suis pas sûr de comprendre...

        Passer la liste en private static dans ma classe oui, mais pour remplir la liste c'est le même procédé que j'utilisais avant, je ne vois pas trop ce qui change... :euh:

        Et du coup, ma méthode 'écart_type' prendrai quoi en paramètre?

        Merci d'avance pour vos explications :)

        -
        Edité par Romain29r 28 mai 2019 à 8:53:21

        • Partager sur Facebook
        • Partager sur Twitter
          28 mai 2019 à 10:53:26

          Bonjour,

          se que veut dire armel.mc si je ne me trompe pas, c'est qu'au lieu de faire 2 méthode regrouper les deux dans une seul, 

          cette méthode prendrait donc "double data" et "int monCompteur" en paramètre, et elle te créera ta liste et calculera ton écart type directement, elle te renvierai donc, juste le résultat de l'écart type.

          Si j'ai bien compris ton problème et que tu n'arrive pas a appeler t'est deux fonction dans le main, il te suffis d’appeler t'a première fonction que tu stock dans une variable et ensuite appeler t'a deuxième fonction avec cette variable en paramètre.

          ArrayList lst = remplir_data(data,compteur);
          double resultat = ecart_type(lst);

          ou en format racourci cela donnerai :

          double resultat = ecart_type(remplir_data(data,compteur));

          j'espère t'avoir aidé, sinon cela ve dire que je suis totalement a coter de la plaque :lol:


          • Partager sur Facebook
          • Partager sur Twitter
            28 mai 2019 à 11:51:01

            tel que tu faisais tu déclarais et initialisais la liste au sein de la méthode remplir_data(...) ce qui réduit la portée de la liste à ladite méthode.

            Ce que je te propose c'est d’accroître la portée de la liste( comme attribut de classe) pour que chacune de tes 2 méthodes aient accès directement à la liste. Du coup ta première méthode va se contenter de remplir la liste, la seconde va invoquer directement  la liste.

            class Main{
             
               // déclaration et initialisation
             	private static ArrayList<Double> mesData = new ArrayList<>();
            	
            	public static void remplir_data(double data,int monCompteur){
            		//parcours
            		mesData.add( data );
            	 
            	}
            
               /**
                cette méthode n'a plus besoin d'une liste en paramètre car elle accès
                à la liste mesData qui devient attribut de classe.
                */
            	public static double ecart_type(){
            		//ici tu peux directement acceder à mesData
                   // par exemple pour calculer la moyenne de la liste
            
            		OptionalDouble moyenne = mesData
                        .stream()
                        .mapToDouble(x -> x)
                        .average();
            	}
            
            
            }





            -
            Edité par armel.mc 28 mai 2019 à 11:51:31

            • Partager sur Facebook
            • Partager sur Twitter
              28 mai 2019 à 13:20:16

              Merci pour ta réponse armel.mc!

              Ainsi, j'ajoute mes valeurs en appelant 'remplir_data(double..., int...)' en temps voulu dans mon 'main' et la méthode 'ecart_type()' est appelée dans 'remplir_data()'. Jusque là ça fonctionne, MAIS!

              Maintenant, je veux récupérer la valeur de retour de ma méthode 'ecart_type()'. Or, si je l'ai déjà appelée dans 'remplir_data()', il y aura doublon, 'ecart_type() va s’exécuter 2 fois au lieu d'une.

              Ainsi, je n'arrive pas à voir où appeler ma méthode 'ecart_type()' et où/comment afficher son retour :/

              Merci d'avance

              • Partager sur Facebook
              • Partager sur Twitter
                28 mai 2019 à 18:35:08

                tu n'as pas besoin d'appeler ecart_type() dans la méthode remplir_data(). tu peux appeler tes 2 méthodes directement dans le main.

                public class Main{
                  
                   // déclaration et initialisation
                    private static ArrayList<Double> mesData = new ArrayList<>();
                     
                    public static void remplir_data(double data,int monCompteur){
                        //parcours
                        mesData.add( data );
                      
                    }
                 
                   /**
                    cette méthode n'a plus besoin d'une liste en paramètre car elle accès
                    à la liste mesData qui devient attribut de classe.
                    */
                    public static double ecart_type(){
                        //ici tu peux directement acceder à mesData
                       // par exemple pour calculer la moyenne de la liste
                 		
                        OptionalDouble moyenne = mesData
                            .stream()
                            .mapToDouble(x -> x)
                            .average();
                	
                		double ecartType = 28.0;
                	return ecartType;
                    }
                 
                    public static void main(String ...args ){
                	 //construction de la liste
                	 remplir_data(1.0, 10);
                	 //affiche l'écart type
                	 System.out.println("Ecart type =" + ecart_type() );
                
                   }
                 
                }

                Après il est possible de construire une autre classe séparée de la méthode main qui aura les 2 méthodes(remplir_data, ecart_type) et pour afficher tu peux redéfinir toString() pour afficher les différentes sorties( liste des éléments, écart type)

                -
                Edité par armel.mc 28 mai 2019 à 18:35:55

                • Partager sur Facebook
                • Partager sur Twitter
                  29 mai 2019 à 8:26:47

                  Merci pour toutes vos réponses, j'ai réussi à obtenir ce que je voulais!

                  Merci et bonne journée :)

                  • Partager sur Facebook
                  • Partager sur Twitter

                  Valeur de retour d'une méthode

                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                  • Editeur
                  • Markdown