-1

配列について助けが必要です。私の質問は、100 個の要素を持つ整数配列を作成したことです。ユーザーが 100 より大きい値を入力すると、Java は例外をスローします。ユーザーが配列に 100 を超える値を入力できるようにすると、ArrayOutOfBoundsException がユーザーにスローされます。ここにコードがあります:

編集サブ配列を含む配列が正しいかどうかを尋ねるのを忘れていました。ちなみに、これはArrayListではなくプレーン配列で行いたいです。

public class Lab6
{
    public static void main(String[] args)throws IOException, NullPointerException, ArrayIndexOutOfBoundsException
    {       
        //the memory with 100 elements
        int[] vMem = new int[100];
        //the memory with 1000 elements
        int[][] vTopMem = new int[1000][];
        vTopMem[0] = vMem; 
        System.out.println("Enter an integer: ");
        File vMemory = new File("file name and location");
        RandomAccessFile storeMem = new RandomAccessFile(vMemory, "rw");
        Scanner input = new Scanner(System.in);
        while(true)
        {
                for(int i = 0; i < vMem.length; i++)
            {
                    vMem[i] = input.nextInt();
                    storeMem.write(i);
                    if(i > vMem.length)
                    {
                     System.out.println("out of bounds!");  
                    }
            }
        }
    }
}
4

2 に答える 2

1

Java のプリミティブ配列を超えるデータ構造を探しているなら、このArrayListクラスが気に入るかもしれません。データを保存することができ、心配する必要はありませんArrayOutOfBoundsException。可変サイズの配列が必要なときはいつでも使用します。

于 2012-07-24T21:01:51.003 に答える
0
if(i>vMem.length)
{
    throw new ArrayIndexOutOfBoundsException();
}

これはあなたが探しているものですか?

編集:

for(int i = 0; i < vMem.length; i++)
{
     vMem[i] = input.nextInt();
     storeMem.write(i);
     if(i > vMem.length)
     {
          System.out.println("out of bounds!");  
     }
 }

for ループの「i」は常に vMem.length よりも小さいため、「i」が vMem.length より大きくなることはありません。データを挿入しようとしているインデックスを確認するために nextInt をチェックしている場合、コードは次のようになります。

while(true)
{
     int i = input.nextInt();
     if(i > vMem.length)
        throw new ArrayindexOutofBoundsException();

     vMem[i] = data;
}

有効な入力を与える限り、これも永久に実行されるため、while ループは何らかのブール値を使用して、いつ終了するかを確認する必要があります。

于 2012-07-24T22:22:51.803 に答える