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

試してデバッグしてください。を使用して引数のサイズを出力しSystem.out.println(args.length);ます。サイズが2より小さい場合、メインクラスへのパラメータを取得していません。

于 2012-09-23T15:17:05.253 に答える
-1

配列内の間違った位置で変数を抽出しようとすると、 ArrayIndexOutOfBounds例外が発生します。

コンパイルex後にJavaでプログラムをjavac hello実行し、次にクラスファイルを実行するとjava hello、の0番目の位置がargs[0]ファイル名になりますhello。この場合。

実行時に発行された引数を正常に抽出するには、配列内の n+1 位置を使用する必要があります。例えば。関連するテキストを抽出するために実行時に発行された変数を使用する場合などにjava hello argument使用するプログラムを実行している場合。args[1]argument

ステートメントが例外を生成するかどうか不明な場合は、try & catchブロック .Read -例外処理を使用するのが常に安全です。

于 2012-09-23T15:22:15.900 に答える