在此方法的前两个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;
}
答案 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()
答案 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++){
....
}