2011-06-10 29 views
9
java.lang.IndexOutOfBoundsException: Index: 1365, Size: 1365 
at java.util.ArrayList.rangeCheck(Unknown Source) 
at java.util.ArrayList.get(Unknown Source) 
at com.Engine.write(Engine.java:114) 
at com.Engine.read(Engine.java:90) 
at com.Engine.main(Engine.java:19) 

benim dizi sınırların dışında olduğunu biliyoruz ancak neBu Java hatası ne anlama geliyor?

Index: 1365, Size: 1365

gösteriyor?

Bunu nasıl düzeltebilirim? Sadece dizimin büyüklüğünü arttırmak mı?

cevap

9

-Boyut (tutabilir elemanların miktarı) dizisinin boyutudur.

-İçindekiler

erişmeye çalıştığınız konumdur.

NOT 1: ilk endeks 0 olduğundan, nerede sen To o istisna

FIX SEÇENEĞİ 1

var neden bu kadar 1+ dizinin maximim erişmeye çalışıyor Eğer elementi idare edebilecek bir döngü kullanan durumunda bu istisna düzeltmek böyle bir şey yapabileceğini:

for(int i = 0; i < array.length; i++) { 
    array[i].doSomething(); 
} 

FIX OPTION

2 Eğer boyutunu artırarak başka bir seçenek olacağını söyledi gibi. Sadece böyle bir şey yapmak gerekir: durumunda değil, çok esnek olacaktır

MyArray[] ma = new MyArray[1366]; 

ANCAK ileride tekrar artırmak istiyorum. Böyle bir şeyden sakınmak için başka bir seçenek, ihtiyaç duyulduğunda otomatik olarak artış gösterdiklerinden, bir Liste gibi biraz daha gelişmiş veri yapısı veya koleksiyonu kullanmak olacaktır.http://tutorials.jenkov.com/java-collections/index.html

Örnek 1 yaratma:

List<MyObject> myObjects = new ArrayList<MyObject>(); 

Örnek 2 iterasyon:

for(MyObject mo : myObjects) { 
    MyObject tmpValue = mo; 
    mo.doSomething(); 
    } 
+0

Hangi boyut ve dizinin temizlendiğini bildirdiğiniz için teşekkür ederiz. Tam ihtiyacım olan şey. –

+0

Hoşgeldin :) – sfrj

1

Bu dizide sadece # 0- # 1364 olan # 1365 dizinine erişiyorsunuz ...
dizi boyutunu büyütmek bir olasılıktır, ancak kesin bir cevap için daha fazla kod gerekeceğini tahmin ediyorum. (örneğin, < = array.length iken yinelemeniz durumunda yardımcı olmaz)

7

Java dizileri 0 dizinlidir, bu nedenle 1365 boyutunda bir dizi varsa geçerli dizinler 0, 1, 2'dir. 1364. Muhtemelen kodunuzda birebir hata var demektir: < length için yinelemek yerine, <= length veya benzeri için yinelendiniz.

3

1365 öğenin bir dizisinde 1365 dizesine erişiyorsunuz. İzin verilen aralık bir döngü içinde dizinizi erişim sağlanıyor 0

1364'de etmektir çünkü aut var? Sayaç değişkeninin dizinin uzunluğuna ulaşmadığından emin olun.

1

Sen dizideki 1365 unsurlar var ama ilk eleman son öğe Varolmayan madde 1365 almaya çalışıyoruz 1364'de sayılı demektir Yani 0'a numaralandırılır. Eğer

2

Diziler genellikle ilk eleman alıyorsanız hata index 0 dan olduğunu 0 endeksli anlamı vardır 0. adresinin sayımı dizine 1365 (1366 de eleman almaya çalışıyoruz çünkü edilir başlıyoruz emin olun element) sadece 1365 elementi tutabilen bir dizide.

2

Hatanızı düzeltmek olmaz dizinin boyutunun artırılması burada veri yapıları hakkında daha fazla bilgi edinin. Sorun senin mantığınla.

int max=1365; 
for(int i=1; i<=max; ++i) 
... 

VEYA

int max=1365; 
for(int i=0; i<=max; ++i) 
... 

Ne yapabileceğini gibi bir şey: Çoğu örneğin, kusurlu bir döngü kullanan Probabl RID'ler yukarıdaki döngü gibi bir şey kullanma

int[] numbers = {1,2,3,4,5,6,7,8,9,10}; 

for(int num:numbers) 
... 

Uzunluk/indeksleri hatırlamak zorundasınız.