У меня проблемы с чтением / печатью после первых двух циклов FOR в этом методе. Это странно. Как я могу решить эту проблему?
private int spacing() { int n = numberOfTriangles(); ArrayList<Double> list_Xs1 = new ArrayList<Double>(); ArrayList<Double> list_Ys1 = new ArrayList<Double>(); for(Polygon p:triangles){ double cX = p.xpoints[0]; double cY = p.ypoints[2]; list_Ys1.add(cY); list_Xs1.add(cX); } //Remove duplicate key in X HashSet<Double> hashSet_list_Xs1= new HashSet<Double>(list_Xs1); ArrayList<Double> list_Xs2 = new ArrayList<Double>(hashSet_list_Xs1); Collections.sort(list_Xs2); //Remove duplicate key in Y HashSet<Double> hashSet_list_Ys1= new HashSet<Double>(list_Ys1); ArrayList<Double> list_Ys2 = new ArrayList<Double>(hashSet_list_Ys1); Collections.sort(list_Ys2); ArrayList<Double> list_Xs3 = new ArrayList<Double>(); ArrayList<Double> list_Ys3 = new ArrayList<Double>(); double distanceX = 0.0,distanceY=0.0; //Get Distance between X coordinate for (int j=0; j<list_Xs2.size(); j++){ distanceX = Math.abs(list_Xs2.get(j) - list_Xs2.get(j+1)); list_Xs3.add(distanceX); System.out.println("I am able to print everything inside this loop"); } System.out.println("After the LOOP for (int j=0; j<list_Xs2.size(); j++), the method seems stop reading the remaining line e.g. cannot print after this loop "); //Get Distance between Y coordinate for (int i=0; i<list_Ys2.size(); i++){ distanceY = Math.abs(list_Ys2.get(i) - list_Ys2.get(i+1)); list_Ys3.add(distanceY); System.out.println("Nothing printed in this loop"); } //Remove duplicate key in Y HashSet<Double> hashSet_list_Ys2= new HashSet<Double>(list_Ys3); ArrayList<Double> list_Ys4 = new ArrayList<Double>(hashSet_list_Ys2) ; //Remove duplicate key in X HashSet<Double> hashSet_list_Xs2 = new HashSet<Double>(list_Xs3); ArrayList<Double> list_Xs4 = new ArrayList<Double>(hashSet_list_Xs2) ; int distinctDistance_Xs = list_Xs4.size(); int distinctDistance_Ys = list_Ys4.size(); int nSpacing = distinctDistance_Xs + distinctDistance_Ys; int RMspacing=0; if (n==1) RMspacing = 1; else if (n != 1) RMspacing = 1 - ((nSpacing-1)/(2*(n-1))); return RMspacing; }
for (int j=0; j<list_Xs2.size(); j++){ distanceX = Math.abs(list_Xs2.get(j) - list_Xs2.get(j+1)); ... }
Это должно вызвать исключение IndexOutOfBoundsException для последней итерации, когда j+1 равно size()
j+1
size()
Ваш код переходит в IndexOutOfBoundsException в цикле list_Xs2; очевидно, ваша среда выполнения игнорирует stderr, что является плохой идеей. Кроме того, я бы посоветовал потратить время на изучение с помощью отладчика, что делает исследование такого рода проблем очень быстрым и простым.
IndexOutOfBoundsException
list_Xs2
Какие-нибудь исключения выброшены?
Если нет, выведите значение list_Ys2.size (), по всей вероятности, оно равно нулю.
Спасибо, ребята, за все предложения, я забыл о последней итерации, число которой совпадает с последней итерацией.Я решил проблему, добавив -1.
for (int j=0; j<list_Xs2.size()-1; j++){ .... } for (int j=0; j<list_Ys2.size()-1; j++){ .... }