今天修改一个点集,是一个Vector类型的变量,point。变量的每一条记录是一个自定义类coo,也很简单,只有x,y两个属性,都是int型的。
要实现的功能很简单,就是把point里的每个x计算一下,x=x*r1/r2。因为在point里边是不能直接进行运算的,所以要把相应的值读出来,运算,再插进去——这就是我开始的思路。后来行不通,改成又新建了一个Vector变量,运算完后,查到这个变量后边,然后在进行一个复制操作。
更改前的代码(大致的):
1 coo one=new coo();
2 for(int i=0;i<point.size();i++){
3 one=point.get(i);
4 one.x=one.x*r1/r2;
5 point.remove(i);
6 point.add(i,one);
7 }
这段代码的错误很多,简单分析一下。
one 并没有分配内存,所以3行获得的只是一个地址,4行操作的也只是把地址为i的内容操作了;
5行逻辑也是错误的,因为地址i的数据就是计算后的,把正确的删掉了又把第i行(就是删除前的第i+1行),插了进去,弄来弄去,全乱套了。
下面是正确的代码正确的代码:
for (int i = 0; i < pointV.size(); i++) {
point_hold = new coordinate();
point_hold.x = ((coordinate) pointV.get(i)).x;
point_hold.y = ((coordinate) pointV.get(i)).y;
point_hold.x = point_hold.x * Reflectance_hold
/ Reflectance;
pointH.add(point_hold);
}
pointV.clear();
pointV=(Vector)pointH.clone();
pointH.clear();
其实这段代码用的是最笨的办法,不多说了,以后多注意。