今天在做项目用到一个递归,竟然做了许久没有找到算法的错误之处,记录下。有空在思考下……
下面是错误代码:
功能是如果字符串以RTS_Mon->结尾,就截去最后面的 RTS_Mon->
处理结果应该为:1 RTS_Mon-> 2 RTS_Mon-> 3 RTS_Mon-> 4 RTS_Mon-> 5 RTS_Mon-> 6 RTS_Mon-> 7 RTS_Mon->" + " "+"RTS_Mon-(Admin)>
String str="1 RTS_Mon-> 2 RTS_Mon-> 3 RTS_Mon-> 4 RTS_Mon-> 5 RTS_Mon-> 6 RTS_Mon-> 7 RTS_Mon->" + " "+"RTS_Mon-(Admin)> RTS_Mon-> RTS_Mon->RTS_Mon->";
public String jieQu(String data) { if (data.trim().endsWith("RTS_Mon->")) { data= data.substring(0, data.trim().length() - 9).trim(); Log.i(TAG, "onCreate: 当前数据:" + temp); jieQu(temp); }else{ Log.i(TAG, "onCreate: 当前数据else:" + data); return data; } return null; }
代码错误之处是: Log.i(TAG, "onCreate: 当前数据else:" + data);这里打印的数据为正确数据,但是运行到return data;后,竟然还会集训往下跑,运行到了return null;并执行了多次return null;
后修改代码为如下,则正常运行。
public String jieQu(String data) { if (data.trim().endsWith("RTS_Mon->")) { data = data.substring(0, data.trim().length() - 9).trim(); Log.i(TAG, "onCreate: 当前数据:" + data); return jieQu(data); }else{ Log.i(TAG, "onCreate: 当前数据else:" + data); return data; } }
看错误代码<!---->
public String jieQu(String data) { Log.i(TAG, "函数:*******"); if (data.trim().endsWith("RTS_Mon->")) { data = data.substring(0, data.trim().length() - 9).trim(); Log.i(TAG, "onCreate: 当前数据:" + data); jieQu(data); }else{ Log.i(TAG, "onCreate: 当前数据else:" + data); return data; } Log.i(TAG, "返回:*******"); return null; }
当字符串最后面更有6个RTS_Mon->时,则需要进入jieQu()方法7次, Log.i(TAG, "函数:*******");打印出7次。Log.i(TAG, "返回:*******");会走6次,
Log.i(TAG, "onCreate: 当前数据else:" + data),走一次。
进入if(){}后,走完代码,都会走return null;只有最后一次走入 else{} return data;