Rumah >Java >javaTutorial >Indeks tatasusunan daripada pengecualian di luar sempadan
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
.
<code class="language-java">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) ... }</code>
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:
<code class="language-java">for (int j = 0; j < nums.length - 1; j++)</code>
Gunakan:
<code class="language-java">for (int j = 0; j < nums.length - 1; j++) </code>
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!