Java 在命令行上提供字符串的正确方法是什么?
我正在创建一个程序来查找用户给定的双值数组列表的标准偏差。我将在命令行上提供一个字符串,以指示我是想要平均值(mean)还是标准偏差(std)。但是,我很难将这些字符串提供给命令行 这就是我得到的错误:Java 在命令行上提供字符串的正确方法是什么?,java,Java,我正在创建一个程序来查找用户给定的双值数组列表的标准偏差。我将在命令行上提供一个字符串,以指示我是想要平均值(mean)还是标准偏差(std)。但是,我很难将这些字符串提供给命令行 这就是我得到的错误: > Exception in thread "main" java.lang.NumberFormatException: For input string: "std" at java.base/java.lang.NumberFormatException.forInp
> 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上教我。当我不知道它的意思时,我不会只是开始加/减东西。我将把这留给“专业人士”