1

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

4 回答 4

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

于 2012-09-23T15:15:14.113 回答
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;

如果数组中没有参数,则意味着您没有将参数传递到程序中,或者您没有传递足够的参数。

于 2012-09-23T15:14:36.543 回答
0

尝试并调试它。使用 打印 args 的大小System.out.println(args.length);。如果大小小于 2,则您没有将参数传递给您的主类。

于 2012-09-23T15:17:05.253 回答
-1

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

当您在编译 ex 后在 java 中运行程序,javac hello然后按 执行类文件时,在这种情况下java hello,第 0 位args[0]将是文件名 ie hello

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

如果你不确定你的语句是否会产生异常,使用try & catchblock 总是安全的。Read -异常处理

于 2012-09-23T15:22:15.900 回答