现在的位置: 首页 > 综合 > 正文

逻辑无误,但确实出错了,出错原因在于变量之前被修改过,已经不是理想中的那个变量值了

2013年10月02日 ⁄ 综合 ⁄ 共 1298字 ⁄ 字号 评论关闭
  1.      /*                 
  2.      
  3.      if(t_dy<dy)
  4.                         dy=t_dy;
  5.                         s2_y=dy;
  6.                            w0=w4;
  7.                             e.x=w2.x;
  8.                             e.y=w2.y-w2.ry+dy/2;
  9.                             e.rx=w2.rx;
  10.                             e.ry=dy/2;
  11.                             e.self_intersect.clear();
  12.                                       
  13.     出现逻辑错误: e.y=w2.y-w2.ry+dy/2; e.ry=dy/2;  因为dy刚刚被修改过 if(t_dy<dy) dy=t_dy;  所以这里的dy有可能已经被改变了 不是原来的dy了,所以出现错误
  14.     修改如下:                               e.y=w2.y-w2.ry+s1_y/2;              e.ry=s1_y/2;
  15. */

其中s1_y 为之前保存的dy值

调试分析时,按道理来说错误就出在这一段的对e赋值的位置

  1. #   if(t_dy<dy)
  2. #                         dy=t_dy;
  3. #
  4. #                         s2_y=dy;
  5. #
  6. #
  7. #
  8. #
  9. #                           w0=w4;
  10. #
  11. #                             e.x=w2.x;
  12. #                             e.y=w2.y-w2.ry+dy/2;
  13. #                             e.rx=w2.rx;
  14. #                             e.ry=dy/2;
  15. #
  16. #                             e.self_intersect.clear();

可是 对e赋值逻辑上是正确的啊,那么问题出现在什么地方呢?这是很奇怪也很让人苦恼的一件问题

其实,虽然逻辑是正确的,但是还有一种出错可能

那就是: 虽然赋值的语句,逻辑没有错误,但是还有一种可能------此段位置中的变量是否是想像中的变量呢
,变量的值在此之前有没有被改变过?

 经分析: 错误原因就是dy的值之前被修改过,所以导致了出现错误 

  总结
  查错思路:
  若从总体上判断某一段位置存在错误,则应从以下两方面进行考虑
 
 (一):这一段有没有逻辑错误,若有则改正之

 (二):若没有逻辑错误,则查看各个变量是否之前被修改过,若是,则进一步判断理论是是应该使用修改后的变量值还是修改之前的变量值-----也就是说问题很可能出在变量值的身上


抱歉!评论已关闭.