在循环内打印的问题:for

时间:2009-10-04 10:46:03

标签: java algorithm loops collections

在此方法的前两个FOR循环之后,我有读取/ println的问题。 这很奇怪。我怎么解决这个问题?

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 个答案:

答案 0 :(得分:1)

抛出任何异常?

如果没有,打印出list_Ys2.size()的值,很可能是零。

答案 1 :(得分:1)

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

j+1等于size()

时,这应该为最后一次迭代抛出一个IndexOutOfBoundsException

答案 2 :(得分:1)

您的代码会在IndexOutOfBoundsException循环中遇到list_Xs2;显然你的执行环境忽略了stderr,这是一个坏主意。此外,我建议花时间学习使用调试器,这样可以非常快速,轻松地调查此类问题。

答案 3 :(得分:0)

感谢大家提出的所有建议,我忘记了最后一次迭代,哪个数字与最后一次迭代相同。我通过添加-1解决了这个问题。

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


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