Rumah > Java > javaTutorial > Indeks tatasusunan daripada pengecualian di luar sempadan

Indeks tatasusunan daripada pengecualian di luar sempadan

Linda Hamilton
Lepaskan: 2025-01-19 06:05:08
asal
295 orang telah melayarinya

Array index out of out-of-bounds exception

Menghadapi ArrayIndexOutOfBoundsException yang digeruni? Panduan ini menerangkan puncanya dan menyediakan penyelesaian praktikal. Walaupun anda masih belum mengalami ralat ini, memahaminya akan menjimatkan anda daripada menyahpepijat sakit kepala.

ArrayIndexOutOfBoundsException timbul apabila kod anda cuba mengakses elemen tatasusunan menggunakan indeks yang berada di luar julat sah tatasusunan. Dalam Java (dan banyak bahasa lain), indeks tatasusunan bermula pada 0 dan memanjang ke array.length - 1. Cuba untuk mengakses array.length atau indeks negatif akan mencetuskan pengecualian ini.

Kajian Kes: Program Isih Java

Pertimbangkan program Java yang direka untuk membaca integer daripada fail, mengisihnya menggunakan isihan gelembung dan memaparkan hasil yang diisih. Kod asal, yang ditunjukkan di bawah, menghasilkan ArrayIndexOutOfBoundsException.

public static void main(String[] args) {
    // ... (File input code using Scanner) ...

    int [] nums = new int [(int) name.length()]; // Problem starts here!

    // ... (File reading code) ...

    for (int i = 0; i < nums.length -1; i++) {
        for (int j = 0; j < nums.length - 1; j++) { // Potential issue here
            if(nums[i] > nums[j + 1]) {
                int temp = nums[j+1];
                nums[j+1] = nums[i];
                nums[i] = temp;
            }
        }
    }

    // ... (Output code) ...
}
Salin selepas log masuk

Punca Masalah

Isu utama terletak pada gelung bersarang dalam jenis gelembung. Talian if(nums[i] > nums[j 1]) bermasalah. Apabila j mencapai nums.length - 1, j 1 menjadi nums.length, indeks tidak sah.

Penyelesaian: Melaraskan Sempadan Gelung

Pembetulan melibatkan pengubahsuaian keadaan gelung dalam untuk menghalang j daripada mencapai indeks terakhir apabila j 1 digunakan. Daripada:

for (int j = 0; j < nums.length - 1; j++)
Salin selepas log masuk

Gunakan:

for (int j = 0; j < nums.length - 1; j++) 
Salin selepas log masuk

Perubahan halus ini memastikan kod mengelak daripada mengakses nums[j 1] apabila j berada pada nilai sah maksimumnya (nums.length - 2).

Pertimbangan Lanjut

  • Saiz Tatasusunan: Pengisytiharan tatasusunan awal int [] nums = new int [(int) name.length()]; juga berpotensi bermasalah. Panjang nama fail tidak berkaitan dengan bilangan integer dalam fail. Adalah lebih baik untuk mensaiz tatasusunan secara dinamik berdasarkan bilangan integer sebenar yang dibaca daripada fail atau menggunakan struktur data yang lebih fleksibel seperti ArrayList.

  • Pengendalian Ralat: Kod teguh termasuk pengendalian ralat (cth., try-catch blok) untuk mengurus kemungkinan pengecualian seperti FileNotFoundException atau NumberFormatException semasa input fail.

Dengan memahami punca dan menggunakan penyelesaian yang disediakan, anda boleh mencegah dan menyelesaikan ralat ArrayIndexOutOfBoundsException dengan berkesan dalam program anda. Ingat untuk mempertimbangkan dengan teliti saiz tatasusunan dan menggabungkan pengendalian ralat yang komprehensif untuk kod yang mantap dan boleh dipercayai.

Atas ialah kandungan terperinci Indeks tatasusunan daripada pengecualian di luar sempadan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan