2017-10-18 8 views
5

私のプログラムのテストを書いています。私のテストはうまくいくことがあり、失敗することもあります。私は、非決定論のすべての原因を追跡しようとしています。ここで繰り返しスロー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と思われる)を呼び出すと、スローされた例外にはバックトレースとメッセージがありません。

このプログラムの出力は、実行ごとに異なります。なぜそれがこれをやっている

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 

: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) 
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 

それが後半に失敗します。ここでは、5494回の繰り返しで、早く出て?

答えて

関連する問題