1

これは、プロジェクトの現在の進行状況です。この ArrayList のものを実装しようとしていますが、ファイルは引き続き同じ例外をスローします。

import java.util.*;

   public class Numerican{

      public static void main( String [] args ){

        Scanner input = new Scanner(System.in);

        ArrayList<Integer> array = new ArrayList<Integer>(10);

        int count = input.nextInt() * 2;

        while (count > 0){
           array.add( 0 );
           count = count - 1;
           array.add(count, 2);
        }

        array.add(2, input.nextInt());
        System.out.println(array.get(2));

      }
   }

配列サイズを 10 に設定するのは私の理解= new ArrayList<Integer>(10);でした。何か間違ったことをしましたか?

4

6 に答える 6

7
= new ArrayList<Integer>(10);

この行は CAPACITY を 10 に初期化します。つまり、メモリはバックエンドに割り当てられますが、配列はまだ空です。

Javadoc -

public ArrayList(int initialCapacity)
    Constructs an empty list with the specified initial capacity.

addのサイズを超えて追加しようとすると、 の呼び出しが失敗する可能性があるのはこのためArrayListです。

ps add2 パラメータ バリアントを使用する場合、関数は最初にインデックスを取り、次に要素を取ることに注意してください。

編集:

ArrayList には、sizecapacityという 2 つの異なるメンバー変数があります。容量は割り当てられたメモリの量、サイズはプログラマによって挿入された要素の数です。

ここでは、容量 = 10、サイズ = 0 です。

于 2013-02-22T05:21:09.140 に答える
0

ねえ、あなたの問題は回線が原因のようです

array.add(count, 2); 

インデックス数に 2 を追加します

たとえば、入力サイズが 5の場合array.add(9,2);、容量とサイズは ArrayList の 2 つの異なるパラメーターであるため、その時点までの配列サイズは 1 にすぎません。そのため、while の代わりに for ループを使用して値を挿入できます。

for(int i=0; i<count;i++)
{
array.add(i,2);
}
于 2013-02-22T05:35:52.027 に答える
0

count maybe >= 10、多分ソースコードはあなたの質問に答えることができます:

public void add(int index, E element) {
    rangeCheckForAdd(index);

    ensureCapacityInternal(size + 1);  // Increments modCount!!
    System.arraycopy(elementData, index, elementData, index + 1,
                     size - index);
    elementData[index] = element;
    size++;
}

rangeCheckForAdd():

/**
 * A version of rangeCheck used by add and addAll.
 */
private void rangeCheckForAdd(int index) {
    if (index > size || index < 0)
        throw new IndexOutOfBoundsException(outOfBoundsMsg(index));
}
于 2013-02-22T05:35:56.900 に答える
0

ArrayList についての私の理解から、順次インデックスのリストに項目を追加する必要があります。
つまり、1~6 が未入力の場合、7 番目のインデックス位置に項目を追加することはできません。

ArrayList.add(indexPosition, 要素);

indexPosition 0 から開始し、毎回 indexPosition を 1 ずつ増やしてリストに要素を追加すると、機能するはずです。

元。
int i = 0;
(while i < 10){
array.add(i, numberToAdd);
i++;
}

于 2013-02-22T05:46:13.530 に答える
0

インデックスが範囲外の場合 (index < 0 || index > size()) IndexOutOfBoundsException がスローされます。
したがって、リストの index > size() にアクセスしていると思います。

size() ===> このリストの要素数を返します。

array.add(2, input.nextInt()); リストサイズが1の場合に考えられる例外は次のとおりです...

于 2013-02-22T05:21:49.077 に答える
0

javadocsによると:

指定された初期容量で空のリストを構築します。

ArrayList がであることに注意してください(つまり、項目が含まれていません)。この値は、より多くのメモリを割り当てる前に追加できる要素の数である ArrayListの容量を示します。

一方、呼び出すと、add()実際には項目が ArrayList に追加されます。あなたの例では、リストの最後に a をarray.add( 0 );追加し、 indexに a を追加します。問題は、それが有効なインデックスではないことだと思います。SOP を挿入するかデバッガを使用して、その値を確認する必要があります。0array.add(count, 2);2countcountArrayList

于 2013-02-22T05:22:07.737 に答える