第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

命令行參數傳遞給調用方法

命令行參數傳遞給調用方法

BIG陽 2022-07-27 16:34:11
如何將字符串的命令行參數傳遞給 java main 方法,該方法將調用另一個類中的特定方法?我需要能夠傳遞“java Statdriver mean”將調用 mean 方法或“java Statdriver std”將調用標準偏差方法,或者不傳遞任何參數將導致通過終端調用 mean 方法。按我的方式做似乎行不通。我認為我的問題在于 if、else if、else 循環(huán)。這是我的代碼:public class StatDriver{   public static void main(String[] args)   {      Scanner input = new Scanner(System.in);      double total;      double mean;      double standardDeviation;      double average;      total = 0;      args[0] = "mean";      args[1] = "std";      ArrayList<Double> data = new ArrayList<Double>();      while(input.hasNextDouble())      {         data.add(input.nextDouble());      }      if(args.equals(args[0]))      {         mean = Stats.mean(data);         System.out.println("Mean: " + mean);      }      else if(args.equals(args[1]))      {         standardDeviation = Stats.stdDev(data);         System.out.println("StdDev: " + standardDeviation);      }      else      {         mean = Stats.mean(data);         System.out.println("Mean: " + mean);      }     // mean = Stats.mean(data);    //standardDeviation = Stats.stdDev(data);    //System.out.println("Mean: " + mean);    // System.out.println(" StdDev: " + standardDeviation);   }  }
查看完整描述

3 回答

?
楊__羊羊

TA貢獻1943條經驗 獲得超7個贊

您正在覆蓋args變量。這應該是這樣的:


public class StatDriver

{


   public static void main(String[] args)

   {

      Scanner input = new Scanner(System.in);


      double total;

      double mean;

      double standardDeviation;

      double average;



      total = 0;


      String[] possibleArgs = new String[2];

      possibleArgs[0] = "mean";

      possibleArgs[1] = "std";


      ArrayList<Double> data = new ArrayList<Double>();


      while(input.hasNextDouble())

      {

         data.add(input.nextDouble());

      }


      if(possibleArgs[0].equals(args[0]))

      {

         mean = Stats.mean(data);

         System.out.println("Mean: " + mean);

      }


      else if(possibleArgs[1].equals(args[1]))

      {

         standardDeviation = Stats.stdDev(data);

         System.out.println("StdDev: " + standardDeviation);

      }


      else

      {

         mean = Stats.mean(data);

         System.out.println("Mean: " + mean);

      }


   }  


}


查看完整回答
反對 回復 2022-07-27
?
智慧大石

TA貢獻1946條經驗 獲得超3個贊

使用 Java 反射特性時,解決方案簡單易行。這是代碼


    import java.lang.reflect.Method;

    import java.util.ArrayList;

    import java.util.Scanner;


    public class StatDriver {


        public static void main(String[] args)

        {

            Scanner input = new Scanner(System.in);

            ArrayList<Double> data = new ArrayList<Double>();


            while(input.hasNextDouble()) {

                data.add(input.nextDouble());

            }


            int length = args.length;


            if(length == 0) {

                double mean = Stats.mean(data);  // By default , mean method is called

        System.out.println(" Result (Mean) :"+mean);

    }

    else if(length > 0) {

        String methodName = args[0];


        try {

            Method method = Stats.class.getMethod(methodName, ArrayList.class);

            method.setAccessible(true);

            Object result = method.invoke(null , data);

            System.out.println("Result of the method :"+methodName+" is "+result);

                }

                catch(Exception e) {

                    e.printStackTrace();

                }

            }

        }

    }


    class Stats{


        public static double mean(ArrayList aList) {

            double result = 0.0D;

            //Logic here

            return result;

        }


        public static double stdDev(ArrayList aList) {

            double result = 0.0D;

            //Logic here

            return result;

        }

    }


查看完整回答
反對 回復 2022-07-27
?
慕的地8271018

TA貢獻1796條經驗 獲得超4個贊

如何在其中使用一個interface與類的方法具有相同覆蓋簽名的方法Stat:


interface StatsOperation{

       double compute(List<Double> data);

}

而Stat類將如下:


class Stats{

        public static double mean(List<Double> data){

            System.out.println("mean invoked");

            //compute mean 

        }

        public static double stdDev(List<Double> data){

            System.out.println("stddev invoked");

           //compute std dev

        }

 }

現在在 main 方法中,您可以使用 aMap來保存類的方法引用Stats(假設您使用的是Java-8):


public static void main(String[] args) {

        Scanner input = new Scanner(System.in);

        Map<String, StatsOperation> lookup = new HashMap<>();

        lookup.put("mean", Stats::mean); //"mean" corresponds to Stats::mean implementation

        lookup.put("stddev", Stats::stdDev); //"stddev" corresponds to Stats::mean implementation

        ArrayList<Double> data = new ArrayList<Double>();

        while(input.hasNextDouble())

        {

            data.add(input.nextDouble());

            if(data.size() == 5) break; //breaking after 5 elements

        }

        StatsOperation operation = args.length > 0 && lookup.get(args[0]) != null ? lookup.get(args[0]) : lookup.get("mean"); //by default calling mean if nothing is sent in args array

        double result = operation.compute(data);

        System.out.println("Output " + result);

        // other business logic below

 }

因此,根據您在args數組中傳遞的值,我們將通過從Map. 這采用運行時多態(tài)性來決定在運行時調用哪個方法。


查看完整回答
反對 回復 2022-07-27
  • 3 回答
  • 0 關注
  • 110 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號