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
将开发中遇到的问题记录下来;再遇到奇怪问题来看一眼;想必会有启发;