Java 在命令行上提供字符串的正确方法是什么?

Java 在命令行上提供字符串的正确方法是什么?,java,Java,我正在创建一个程序来查找用户给定的双值数组列表的标准偏差。我将在命令行上提供一个字符串,以指示我是想要平均值(mean)还是标准偏差(std)。但是,我很难将这些字符串提供给命令行 这就是我得到的错误: > Exception in thread "main" java.lang.NumberFormatException: For input string: "std" at java.base/java.lang.NumberFormatException.forInp

我正在创建一个程序来查找用户给定的双值数组列表的标准偏差。我将在命令行上提供一个字符串,以指示我是想要平均值(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));      
         }
       }
    }
>线程“main”java.lang.NumberFormatException中的异常:对于输入字符串:“std”
位于java.base/java.lang.NumberFormatException.forInputString(未知源)
位于java.base/java.lang.Integer.parseInt(未知源)
位于java.base/java.lang.Integer.parseInt(未知源)
在StatDriver.main(StatDriver.java:28)
公共静态void main(字符串[]args){
扫描仪输入;
阵列列表数据;
int-dataSize;
字符串userInput=“”;
//确定适当的数组大小。
如果(args.length>0){
dataSize=Integer.parseInt(args[0]);
}否则{
数据大小=15;
}
//创建数组。
数据=新的ArrayList(数据大小);
//从终端读取值。
输入=新扫描仪(System.in);
while(input.hasNextDouble()){
data.add(input.nextDouble());
}
//计算并显示结果。
如果(参数[0]=“平均值”){
System.out.printf(“平均值:%.2f\n”,统计平均值(数据));
}
否则如果(参数[0]=“标准”){
System.out.printf(“StdDev:%.2f\n”,Stats.StdDev(数据));
}
否则{
System.out.printf(“平均值:%.2f\n”,统计平均值(数据));
}
}
}

这需要修复:

如果要传入单个命令行参数“std”或“mean”,则由于args.length大于0,将“std”或“mean”解析为整数值时将抛出错误

      // 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"
}

请提供一个在命令行中传递内容的示例好吗?如果未输入任何内容,则最后一个else语句是默认值。@Jesse java StatDriver stdy您的问题很可能是这样的:dataSize=Integer.parseInt(args[0]);如果参数的第一个输入位置是字符串,则无法对其进行分析?不要使用==来比较字符串。顺便说一句:这个错误信息非常清楚。“std”不是一个数字。这是因为比较字符串的方式不对。我应该能够在命令行上提供一个字符串,指示它们是要计算平均值(“平均值”)还是标准偏差(“标准差”),所以我假设dataSize应该是字符串值的语句?正确,您可以提供多个命令行参数。我会分别对待他们。您现在的问题是,您正在执行一项检查,以确定args.length是否大于0,并尝试将位置0处的arg解析为int。在您的情况下,您正在位置0处输入一个字符串(“std”或“mean”),这会导致您的程序崩溃,因为您无法解析“std”或“mean”一个整数。我不是问如何比较这里的字符串。如果是的话,我可以自己调试。问题不在于命令行参数。它试图将字符串解析为intI,但我仍然不明白您在说什么。我想我会让一个印度人在YouTube上教我。当我不知道它的意思时,我不会只是开始加/减东西。我将把这留给“专业人士”