का उत्पादन बंद करो मैं अपने कार्यक्रम के लिए परीक्षण लिख रहा हूं। कभी-कभी मेरे परीक्षण काम करते हैं, और कभी-कभी वे असफल होते हैं। मैं nondeterminism के सभी स्रोतों को ट्रैक करने की कोशिश कर रहा हूँ।बार-बार फेंक दिया गया ArrayIndexOutOfBoundsException स्टैक निशान
यहाँ मेरी समस्या का एक सरल, आत्म निहित उदाहरण है:
import java.util.ArrayList;
public class ArrayExceptions {
public static void main(String[] args) {
final int ITERATIONS = 10000;
ArrayList<Integer> list = new ArrayList<>();
try {
list.get(-1);
} catch(ArrayIndexOutOfBoundsException e) {
e.printStackTrace();
}
for(int i = 0; i < ITERATIONS; i++) {
try{
list.get(-1);
} catch (ArrayIndexOutOfBoundsException e) {
if(e.getMessage() == null) {
System.out.println(i);
break;
}
}
}
for(int i = 0; i < 10; i++) {
try {
list.get(-1);
} catch(ArrayIndexOutOfBoundsException e) {
e.printStackTrace();
}
}
}
}
इस कार्यक्रम के एक ArrayList पैदा करता है। यह बार-बार तत्व -1 तक पहुंचने का प्रयास करता है। प्रारंभ में, यह एक विस्तृत बैकट्रैक और ArrayIndexOutOfBoundsException के साथ एक संदेश बनाता है। हालांकि, अगर आप इसे पर्याप्त समय कहते हैं (जहां 'पर्याप्त' लगभग 5500 लगता है) फेंकने वाले अपवाद में बैकट्रैक और एक संदेश की कमी है।
इस कार्यक्रम का आउटपुट रन से चलाने के लिए भिन्न होता है। यहाँ यह जल्दी बाहर निकलता 5494 पुनरावृत्तियों में:
java.lang.ArrayIndexOutOfBoundsException: -1
at java.util.ArrayList.elementData(ArrayList.java:418)
at java.util.ArrayList.get(ArrayList.java:431)
at ArrayExceptions.main(ArrayExceptions.java:8)
5494
java.lang.ArrayIndexOutOfBoundsException
java.lang.ArrayIndexOutOfBoundsException
java.lang.ArrayIndexOutOfBoundsException
java.lang.ArrayIndexOutOfBoundsException
java.lang.ArrayIndexOutOfBoundsException
java.lang.ArrayIndexOutOfBoundsException
java.lang.ArrayIndexOutOfBoundsException
java.lang.ArrayIndexOutOfBoundsException
java.lang.ArrayIndexOutOfBoundsException
java.lang.ArrayIndexOutOfBoundsException
यहाँ यह देर से विफल रहता है 5540 पुनरावृत्तियों में:
java.lang.ArrayIndexOutOfBoundsException: -1
at java.util.ArrayList.elementData(ArrayList.java:418)
at java.util.ArrayList.get(ArrayList.java:431)
at ArrayExceptions.main(ArrayExceptions.java:8)
5540
java.lang.ArrayIndexOutOfBoundsException
java.lang.ArrayIndexOutOfBoundsException
java.lang.ArrayIndexOutOfBoundsException
java.lang.ArrayIndexOutOfBoundsException
java.lang.ArrayIndexOutOfBoundsException
java.lang.ArrayIndexOutOfBoundsException
java.lang.ArrayIndexOutOfBoundsException
java.lang.ArrayIndexOutOfBoundsException
java.lang.ArrayIndexOutOfBoundsException
java.lang.ArrayIndexOutOfBoundsException
यह ऐसा क्यों कर रहा है?