Проблема с печатью внутри цикла: для - PullRequest
0 голосов
/ 04 октября 2009

У меня проблемы с чтением / печатью после первых двух циклов 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;
}

Ответы [ 4 ]

1 голос
/ 04 октября 2009
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()

1 голос
/ 04 октября 2009

Ваш код переходит в IndexOutOfBoundsException в цикле list_Xs2; очевидно, ваша среда выполнения игнорирует stderr, что является плохой идеей. Кроме того, я бы посоветовал потратить время на изучение с помощью отладчика, что делает исследование такого рода проблем очень быстрым и простым.

1 голос
/ 04 октября 2009

Какие-нибудь исключения выброшены?

Если нет, выведите значение list_Ys2.size (), по всей вероятности, оно равно нулю.

0 голосов
/ 04 октября 2009

Спасибо, ребята, за все предложения, я забыл о последней итерации, число которой совпадает с последней итерацией.Я решил проблему, добавив -1.

 for (int j=0; j<list_Xs2.size()-1; j++){
    ....
 }


 for (int j=0; j<list_Ys2.size()-1; j++){
    ....
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...