2011-06-10 15 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) 

मैं समझता हूँ कि मेरी सरणी सीमा से बाहर है, लेकिन क्या करता हैइस जावा त्रुटि का क्या अर्थ है?

Index: 1365, Size: 1365

से संकेत मिलता है?

और मैं इसे ठीक करके कैसे जा सकता हूं? बस मेरी सरणी का आकार बढ़ाएं?

उत्तर

9

-आकार सरणी का आकार है (तत्वों की मात्रा जो हो सकती है)।

-इंडेक्स वह स्थान है जहां आप पहुंचने का प्रयास कर रहे थे।

नोट 1: के बाद से पहली बार सूचकांक 0 है, तो आप जहां इतना है कि तुम क्यों करने के लिए कि अपवाद

ठीक विकल्प 1

मिला सरणी के maximim का उपयोग करने की कोशिश कर रहा है 1 + मामले में इस अपवाद को ठीक आप एक पाश का उपयोग कर रहे तत्वों में हेरफेर करने के आप कुछ इस तरह कर सकता है:

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

ठीक विकल्प 2

जैसा कि आपने कहा कि आकार बढ़ाना एक और विकल्प होगा। तुम बस कुछ इस तरह करने की जरूरत है:

MyArray[] ma = new MyArray[1366]; 

लेकिन यही नहीं बहुत लचीला हो सकता है, इस स्थिति में आप भविष्य में फिर से यह बढ़ाना चाहते हैं। तो इस तरह से कुछ से बचने के लिए एक और विकल्प एक सूची की तरह थोड़ा और अधिक उन्नत डेटा संरचना या संग्रह का उपयोग करना होगा, क्योंकि जब आवश्यक हो तो वे स्वचालित रूप से वृद्धि प्राप्त करते हैं।http://tutorials.jenkov.com/java-collections/index.html

उदाहरण 1 निर्माण:

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

उदाहरण 2 यात्रा:

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

आकार और अनुक्रमणिका को साफ़ करने के लिए धन्यवाद, बहुत उपयोगी है। मुझे जिस चीज की जरूरत थी। –

+0

आपका स्वागत है :) – sfrj

1

आप इंडेक्स # 1365 एक्सेस करते हैं, जहां आपके पास इस सरणी में केवल # 0- # 1364 है ...
सरणी आकार में वृद्धि करना एक संभावना है, लेकिन मुझे लगता है कि सटीक उत्तर के लिए अधिक कोड की आवश्यकता होगी। (उदाहरण के लिए यदि आप < = array.length)

7

जावा सरणी 0-अनुक्रमित हैं, तो यदि यह आकार 1365 मान्य सूचकांक 0, 1, 2 है, तो आप इसे पुन: सक्रिय नहीं करेंगे। 1364. आपके पास शायद आपके कोड में एक-एक-एक त्रुटि है: < length पर पुनरावृत्ति करने के बजाय, आप <= length, या इसी तरह के लिए पुनरावृत्त हो गए हैं।

3

आप 1365 तत्वों की एक सरणी में अनुक्रमणिका 1365 तक पहुंच रहे हैं। यह सीमा से बाहर है क्योंकि अनुमत सीमा 0 से 1364 है।

क्या आप लूप में अपनी सरणी का उपयोग कर रहे हैं? सुनिश्चित करें कि काउंटर वैरिएबल सरणी की लंबाई तक नहीं पहुंचता है।

1

आपके पास आपके सरणी में 1365 तत्व हैं लेकिन पहला तत्व क्रमांकित है 0. इसका मतलब है कि अंतिम तत्व 1364 है। आप आइटम 1365 प्राप्त करने का प्रयास कर रहे हैं जो मौजूद नहीं है। सुनिश्चित करें कि आप अपनी गिनती 0 से शुरू कर रहे हैं।

2

Arrays आमतौर पर 0 अनुक्रमित अर्थ है कि पहला तत्व इंडेक्स 0 पर है। आपको जो त्रुटि मिल रही है वह है क्योंकि आप इंडेक्स 1365 (1366 वें स्थान पर तत्व प्राप्त करने का प्रयास कर रहे हैं) तत्व) एक सरणी में केवल 1365 तत्व रख सकते हैं।

2

सरणी अपने बग ठीक नहीं होगा का आकार बढ़ाने से डेटा यहां संरचना के बारे में अधिक जानकारी देखें। समस्या आपके तर्क के साथ है। सबसे probabl आप एक त्रुटिपूर्ण पाश का उपयोग कर रहे हैं, उदाहरण के लिए:

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

या

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

की तरह कुछ तुम क्या कर सकता है:

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

for(int num:numbers) 
... 

rids ऊपर पाश के लिए की तरह कुछ का उपयोग करना आपको लंबाई/सूचकांक याद रखना होगा।

संबंधित मुद्दे