第二番 使用return遇到的坑

0.描述

在一个返回值为void方法中使用了return。这句话的意思是在一个并不期望得到返回值的方法中使用了 **return; ** 语句。

1.问题描述

BlockView 类中包含 int x,与 int y 两个属性,在方法中执行完对相应BlockView对象的处理后有时会将x、y设置为-1, 而代码中由于执行了return;语句,造成在方法结束时未执行清理语句blocks.clear();,导致这些被置为-1的对象还存在于blocks中,进而导致下次进入这个方法时,由于一些BlockView对象的x、y值为-1,导致代码 部分会出现数组下标为-1的异常。
类似关于return的问题我已经遇到2回了╮(╯▽╰)╭敢不敢再粗心点、

2.代码示例

private boolean beginMoveToLeft(List<BlockView> blocks) {
   
    if(blocks==null ||blocks.size()==0) {
        return ;
    }
    if(blocks.size() == 2){
        ...
    } if(blocks.size() == 3) {         // 
        BlockView b0 = blocks.get(0);
        BlockView b1 = blocks.get(1);
        BlockView b2 = blocks.get(2);
        int x0 =  b0.getLocation()[0];//
        int x1 = b1.getLocation()[0];//
        int x2 = b2.getLocation()[0];//x坐标   
        int y = b0.getLocation()[1];  //y坐标
        if(b0.isEquals(b1.getPower())) {//②
            ...//对 b0 b1 b2 分别进行操作
            ... //将 他们的x y 置为-1
           dyadicArray[x0][y] = -1; // ①      二维数组矩阵记录位置
            return ;
        }
        if(b1.isEquals(b2.getPower())) {
            ...//
        }else{
        }
    } else if(blocks.size() == 4) {
          ...
    }
    blocks.clear();//**************重点***************
}

3.总结

啰里啰嗦一大堆,总结起来一句话:“使用return要当心,看看后面有没有因为提前终止而未执行到的语句”。

END


将开发中遇到的问题记录下来;再遇到奇怪问题来看一眼;想必会有启发;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容