2
public static int[] allBetween()
    {
        Scanner input = new Scanner(System.in);
        int first;
        int last;

        System.out.println("Enter the first number");
        first = input.nextInt();
        System.out.println("Enter the last number");
        last = input.nextInt();

        int[] between = {((last - first) + 1)};

        for(int count = 0; count <= (last - first); count++)
        {
            between[count] = (first + count);
        }

        return between;
    }

私は少し錆びており、ここでは問題が見られません。配列のサイズを手動で 100 に割り当て、最初と最後を 1 と 5 に割り当てようとしましたが、それでも同じエラーが返されます。

何か案は?

これは、スタック オーバー フローに関する私の最初の投稿です。間違った方法で投稿している場合は、修正してください

4

4 に答える 4

4

以下のステートメント:

int[] between = {((last - first) + 1)};

値を使用して、単一の要素だけで配列を初期化します -last - first + 1

次のように変更します。

int size = last - first + 1;
int[] between = new int[size];

そして、ループを次のように変更できます。

for(int count = 0; count < size; ++count)
于 2013-08-15T15:12:56.467 に答える
3

この行:

int[] between = {((last - first) + 1)};

は、値が に等しい単一の要素を持つ配列を作成し((last - first) + 1ます。

使用する:

int[] between = new int[(last-first)+1];

とにかく、それを反復するには、より読みやすく慣用的な構造を使用できます。

for(int count = 0; count < between[length]; count++)
{
    between[count] = (first + count);
}

配列は括弧で明示的に作成され、括弧でアドレス指定され、次元が指定されることに注意してください。

また、between[count] = (first + count);疑わしいようです。それが本当にやりたいこと、つまり のcountth要素をbetweentoに設定することであることを確認してくださいfirst+count。それは、で満たされた配列を作成するだけfirst, first+1, ...です。

于 2013-08-15T15:13:09.240 に答える
3

問題は次のとおりです。

int[] between = {((last - first) + 1)}; //initializes array with value

この配列のインデックス 0 には値が 1 つしかなく、が 0last-firstより大きい場合は、最終的にArrayIndexOutOfBoundsException.

詳細については、配列のチュートリアルを参照してください。

于 2013-08-15T15:12:37.257 に答える
3

交換する必要があります

int[] between = {((last - first) + 1)};

int[] between = new int[((last - first) + 1)];

お使いのバージョンは常に長さ 1 の配列を作成するためです。たとえば、次を参照してください。

int[] foo = {22};

int[]長さ 1 で、foo[0]です22。一方

int[] bar = new int[33];

各インデックスがデフォルト値を格納する長さ 33 の配列として作成します0

于 2013-08-15T15:12:56.590 に答える