Array方法中的ArrayIndexOutOfBounds异常

时间:2012-09-23 15:12:15

标签: java

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

4 个答案:

答案 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)

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

ArrayIndexOutOfBounds异常。

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

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

如果您不确定自己的陈述是否会产生异常,则可以安全地使用try & catch阻止。阅读 - Exception Handling

相关问题