hello world

随笔 - 2, 文章 - 63, 评论 - 0, 引用 - 0
数据加载中……

Vector随记

今天修改一个点集,是一个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();

其实这段代码用的是最笨的办法,不多说了,以后多注意。

posted on 2008-08-29 12:35 听风 阅读(159) 评论(0)  编辑  收藏 所属分类: JAVA


只有注册用户登录后才能发表评论。


网站导航: