Rumah  >  Artikel  >  Java  >  Penyelesaian untuk menyelesaikan pengecualian lelaran Java (IterationException)

Penyelesaian untuk menyelesaikan pengecualian lelaran Java (IterationException)

WBOY
WBOYasal
2023-08-17 20:34:451538semak imbas

Penyelesaian untuk menyelesaikan pengecualian lelaran Java (IterationException)

Penyelesaian kepada Java IterationException

Apabila pengaturcaraan di Java, kita sering menghadapi masalah IterationException. Pengecualian ini biasanya berlaku apabila menggunakan Iterator atau gelung untuk dipertingkat untuk melintasi Koleksi atau tatasusunan.

Punca pengecualian lelaran biasanya disebabkan oleh pengubahsuaian pada koleksi atau tatasusunan semasa proses lelaran. Ini boleh mengakibatkan indeks atau penunjuk tidak sah semasa lelaran, sekali gus membuang pengecualian. Untuk menyelesaikan masalah ini, kita boleh mengambil kaedah berikut.

  1. Gunakan gelung untuk biasa dan bukannya gelung untuk dipertingkatkan
    Gelung untuk dipertingkat ialah gula sintaksis yang memudahkan melintasi koleksi atau tatasusunan. Walaupun ia lebih ringkas dalam penulisan kod, adalah disyorkan untuk menggunakan gelung normal untuk apabila kita perlu mengubah suai koleksi atau tatasusunan semasa lelaran. Ini kerana dalam gelung biasa, kita boleh mengawal indeks secara manual untuk mengelakkan pengecualian lelaran.

Berikut ialah kod sampel yang menggunakan gelung normal untuk menyelesaikan pengecualian lelaran:

List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);

for (int i = 0; i < list.size(); i++) {
    if (list.get(i) == 2) {
        list.remove(i);
    }
}

System.out.println(list); // 输出 [1, 3]
  1. Gunakan kaedah remove() bagi iterator
    Lelaran ialah objek khas yang digunakan untuk melintasi koleksi. Ia menyediakan satu siri kaedah untuk beroperasi pada koleksi, termasuk memadamkan elemen semasa lelaran. Menggunakan kaedah remove() iterator boleh memadamkan elemen dalam koleksi dengan selamat semasa proses lelaran dan mengelakkan berlakunya pengecualian lelaran.

Berikut ialah contoh kod yang menggunakan kaedah remove() iterator untuk menyelesaikan pengecualian lelaran:

List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);

Iterator<Integer> iterator = list.iterator();
while(iterator.hasNext()) {
    int num = iterator.next();
    if(num == 2) {
        iterator.remove();
    }
}

System.out.println(list); // 输出 [1, 3]
  1. Gunakan Koleksi Serentak (Koleksi Serentak)
    Jika kita perlu mengulang dalam persekitaran berbilang benang, adalah disyorkan untuk menggunakan Koleksi Serentak (Koleksi Serentak) Koleksi). Koleksi serentak adalah selamat untuk benang dan boleh melakukan operasi baca dan tulis pada berbilang benang pada masa yang sama untuk mengelakkan pengecualian lelaran.

Berikut ialah kod sampel yang menggunakan koleksi serentak untuk menyelesaikan pengecualian lelaran:

ConcurrentList<Integer> list = new ConcurrentList<>();
list.add(1);
list.add(2);
list.add(3);

for (Integer num : list) {
    if (num == 2) {
        list.remove(num);
    }
}

System.out.println(list); // 输出 [1, 3]

Ringkasan:
Dalam pengaturcaraan Java, pengecualian lelaran adalah masalah biasa. Untuk menyelesaikan masalah ini, kita boleh menggunakan gelung normal untuk bukannya gelung untuk dipertingkat, gunakan kaedah remove() lelaran atau gunakan koleksi serentak. Kaedah ini boleh membantu kami mengelakkan berlakunya pengecualian lelaran dan memastikan pelaksanaan program yang betul.

Tidak kira kaedah yang digunakan, kita harus memberi perhatian untuk mengelakkan pengubahsuaian koleksi atau tatasusunan semasa proses lelaran untuk mengelakkan pengecualian semasa proses lelaran. Piawaian pengekodan yang munasabah dan semakan kod yang teliti juga merupakan cara penting untuk mengelakkan anomali lelaran.

Atas ialah kandungan terperinci Penyelesaian untuk menyelesaikan pengecualian lelaran Java (IterationException). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn