我收到数组绑定错误但是在我看来,数组从0开始,所以这段代码出了什么问题?
public class Quadratic {
public static void main(String[] args) {
double b = Double.parseDouble(args[0]);
double c = Double.parseDouble(args[1]);
double discriminant = b*b - 4.0*c;
double sqroot = Math.sqrt(discriminant);
double root1 = (-b + sqroot)/ 2.0;
double root2 = (-b - sqroot)/ 2.0;
System.out.println(root1);
System.out.println(root2);
}
}
答案 0 :(得分:2)
保护自己:保持防守。
public class Quadratic {
public static void main(String[] args) {
if (args.length> 1) {
double b = ((args.length > 0) ? Double.parseDouble(args[0]) : 0.0);
double c = ((args.length > 1) ? Double.parseDouble(args[1]) : 0.0);
double discriminant = b*b - 4.0*c;
double sqroot = Math.sqrt(discriminant);
double root1 = (-b + sqroot)/ 2.0;
double root2 = (-b - sqroot)/ 2.0;
System.out.println(root1);
System.out.println(root2);
} else {
System.out.println("two arguments are required: b and c, please");
}
}
}
如果判别式是否定的,会发生什么?如果它为零怎么办?
为什么要将自己限制在a = 1?
的情况下答案 1 :(得分:1)
args [0]和/或args [1]中没有项目。您需要检查数组中是否有足够的参数。
double b = args.length>=1?Double.parseDouble(args[0]):0.0;
double c = args.length>=2?Double.parseDouble(args[1]):0.0;
如果数组中没有参数,则表示您没有将参数传递给程序,或者您没有传递足够的参数。
答案 2 :(得分:0)
尝试并调试它。使用System.out.println(args.length);
打印args的大小。
如果尺寸小于2那么你没有得到主要类的参数。
答案 3 :(得分:-1)
在编译ex javac hello
之后在java中运行程序然后按java hello
执行类文件时,args[0]
的第0个位置将是hello
在这种情况下。
为了成功提取在运行时发出的参数,您必须在数组中使用n + 1位置。例如。如果我正在以java hello argument
运行我的程序,如果我希望在运行时使用已发布的变量args[1]
,那么我将使用argument
来提取相关文本。
如果您不确定自己的陈述是否会产生异常,则可以安全地使用try & catch
阻止。阅读 - Exception Handling