0

配列を1に初期化し、入力がいっぱいになるたびに2倍にしようとしています。これは私が今持っているものです

int max = 1;
 PhoneRecord[] records = new PhoneRecord[max];
      int numRecords = 0;
      int size = Integer.parseInt(length.records[numRecords]);
 if (size >= max) {
   size = 2*size;
 }

しかし、それは明らかに失敗に満ちています。提案やガイダンスは素晴らしいでしょう、ありがとう。

4

3 に答える 3

1

OK、あなたはを使うべきですArrayList、しかし他の何人かの人々はすでにあなたにそれを言いました。

それでも配列を使用したい場合は、次のようにサイズを変更します。

int max = 1;
PhoneRecord[] records = new PhoneRecord[max];
int numRecords = 0;

void addRecord(PhoneRecord rec) {
    records[numRecords++] = rec;
    if(numRecords == max) {
        /* out of space, double the array size */
        max *= 2;
        records = Arrays.copyOf(records, max);
    }
}
于 2012-10-15T17:11:15.987 に答える
1

ArrayListを使用してみませんか?非常によく似た特性を自動的に示します。

プライベートgrow()メソッドから:

int newCapacity = oldCapacity + (oldCapacity >> 1);

成長の振る舞いを無効にすることはできませんが、アプリの特性のために本当に2倍にする必要がない限り、それで十分だと確信しています。

于 2012-10-15T16:59:32.430 に答える
1

サイズは、配列サイズを 2 倍にするのではなく、サイズの数値を掛けるだけです。試す:

            records = Arrays.copyOf(records, records.length*2);
于 2012-10-15T17:16:53.677 に答える