views:

120

answers:

4

Hi, I have problem reading/println after the first two FOR loop in this method. This is strange. How can I solve this problem?

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;
}
+1  A: 

Any exceptions thrown?

If not, print out the value of list_Ys2.size(), in all probability it's zero.

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

This should throw an IndexOutOfBoundsException for the last iteration, when j+1 equals size()

Zed
+1  A: 

Your code runs into an IndexOutOfBoundsException in the list_Xs2 loop; apparently your execution environment ignores stderr, which is a bad idea. Additionally, I'd suggest taking the time to learn using a debugger, which makes investigating this kind of problem very quick and easy.

Michael Borgwardt
A: 

Thanks guys for all the suggestions, I forgot about the last iteration which number is the same with the last iteration. I solved the problem by adding -1.

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


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