0
import java.util.Scanner;

public class Maintest {
    static Scanner kb = new Scanner(System.in);
    public static void main (String args[]) {
        System.out.println("This is how you should format your equation => 3.0 x + 5.5 y = 9.0");
        System.out.println("Type your first equation:");
        String first = kb.nextLine();
        //first equation
        Scanner one = new Scanner(first);
        //scanner for first
        double[] arr = new double[6];
        //arr containing numbers
        String[] vars = new String[2];
        //arr containing variable names
        System.out.println("Type your second equation:");
        String second = kb.nextLine();
        //second equations
        Scanner two = new Scanner(second);
        //scanner for second
        one.useDelimiter("[^\\p{Alnum},\\.-]");
        two.useDelimiter("[^\\p{Alnum},\\.-]");
        //anything other than alphanumberic characters,
        //comma, dot or negative sign is skipped
        for (int i = 1; i <= 3; i++) {
            if (one.hasNextDouble())
                arr[i-1] = one.nextDouble();
            else if (one.hasNext())
                vars[i-1] = one.next();
            else if (two.hasNextDouble())
                arr[i+2] = one.nextDouble();
            else if (arr[i-1] == 0.0)
                arr[i-1] = 1.0;
            //putting values into array
        }
        System.out.println(arr[3]);
        System.out.println(vars[2]);
    }
}

私のコードの何が問題なのか疑問に思っていました。線形方程式系を解くことになっていますが、現在、私は人が入力する方程式から値を取得することに取り組んでいます。私が伝えた配列の特定のインデックスの値を出力することを期待していました(つまり、arr[3] と vars[2]) を印刷しますが、java.lang.ArrayIndexOutOfBoundsException: 2 と表示されます。ああ、同じ量のコードを完了するためのより効率的な方法を知りたかったのです。おそらく、ユーザーが不要なスペースや .0 をすべて使用せずに 3x+4.5y=15 と入力できたとしてもです。助けてくれてありがとう!

4

1 に答える 1

1

ご覧のとおりvars、サイズ 2 の配列です。

String[] vars = new String[2];

vars[0]Java は 0 からインデックスを作成するため、配列にはとの 2 つの文字列用の「余裕」があることを意味しますvars[1]。それを超えるものは範囲外であるため、エラーが発生します。

System.out.println(vars[2]); //vars[2] would be the third String, but vars's length is only two!

vars[2]また、print ステートメントの前のループでアクセスしようとしていないことも確認する必要があります。

于 2013-10-27T19:10:09.130 に答える