Array方法中的ArrayIndexOutOfBoundsexception

我收到了数组绑定错误但是在我看来,数组从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); } } 

保护自己:保持防守。

  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的情况下?

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; 

如果数组中没有参数,则表示您没有将参数传递给程序,或者您没有传递足够的参数。

尝试并调试它。 使用System.out.println(args.length);打印args的大小System.out.println(args.length); 。 如果尺寸小于2那么你没有得到主类的参数。

当您尝试在数组中的错误位置提取变量时,会发生ArrayIndexOutOfBoundsexception。

当您在编译ex javac hello之后在java中运行程序然后通过java hello执行类文件时, args[0]的第0个位置将是文件名,即在这种情况下为hello

为了成功提取在运行时发出的参数,您必须在数组中使用n + 1位置。 例如。 如果我正在运行我的程序作为java hello argument我将使用args[1]如果我希望在运行时使用已发布的变量argument ,依此类推以提取相关文本。

如果您不确定您的语句是否会生成exception,那么使用try & catch block总是安全的.Read – exception处理