首页 > 解决方案 > 在命令行上提供字符串的正确方法是什么?

问题描述

我正在创建一个程序来查找用户给出的双精度值的 ArrayList 的标准偏差。我要在命令行上提供一个字符串来指示我想要平均值(mean)还是标准差(std)。但是,我很难将这些字符串提供给命令行。

这是我得到的错误:

> Exception in thread "main" java.lang.NumberFormatException: For input string: "std"
        at java.base/java.lang.NumberFormatException.forInputString(Unknown Source)
        at java.base/java.lang.Integer.parseInt(Unknown Source)
        at java.base/java.lang.Integer.parseInt(Unknown Source)
        at StatDriver.main(StatDriver.java:28)

        public static void main(String[] args) {

          Scanner input;
          ArrayList<Double> data;
          int dataSize;
          String userInput = "";

          // Determine the appropriate array size.
          if (args.length > 0) {
             dataSize = Integer.parseInt(args[0]);
          } else {
             dataSize = 15;
          }

          // Create the array.
          data = new ArrayList<Double>(dataSize);

          // Read values from the terminal.
          input = new Scanner(System.in);
          while (input.hasNextDouble()) {
             data.add(input.nextDouble());
          }

          // Calculate and display the results.
          if(args[0] == "mean") {
              System.out.printf("Mean: %.2f\n", Stats.mean(data));
          }
          else if (args[0] == "std") {
              System.out.printf("StdDev: %.2f\n", Stats.stdDev(data));
          }
          else {
              System.out.printf("Mean: %.2f\n", Stats.mean(data));      
         }
       }
    }

标签: java

解决方案


这需要修复:

如果您传入单个命令行参数“std”或“mean”,那么由于 args.length 大于 0,尝试将“std”或“mean”解析为 Integer 值时会抛出错误。

      // Determine the appropriate array size.
      if (args.length > 0) {
         dataSize = Integer.parseInt(args[0]);
      } else {
         dataSize = 15;
      }

因此,如果您将检查更改为这样的内容,并输入“java StatDriver std 10”:

解析将成功,因为您将能够解析第二个位置的参数“10”。

  // Determine the appropriate array size.
  if (args.length > 0) {
     dataSize = Integer.parseInt(args[1]);
  } else {
     dataSize = 15;
  }

通常,如果您使用命令行参数运行程序 java 程序:

java MyProgram one two

public static void main(String [] args) {
    String one = args[0]; //=="one"
    String two = args[1]; //=="two"
}

推荐阅读