1. A严格依赖于B,但是B之后又改变了,这时候再用A,就会出现一些意想不到的错误。。。比如数组越界等,所以一点要确保中间B没有任何变化。
#找 万 所在的位置
index_of_wan = money.find('万')
#将money截取
money = money[money.find('亿'):]
#注意这个时候money已经改变了导致index_of_wan已经失效
money[index_of_wan]!='万'
2. 当循环中出现可变容器时,在循环过程中会改变容器的size,要注意。。
PriorityQueue<>pq;
for(int i=0;i<pq.size();i++){
pq.poll(); //因为弹出而改变了容器的size,就会出错
}
//最好遍历
while(!pq.isempty()){
dosomething();
}
3. 当后面的计算依赖于某一项时,要保证该项在中途是否会变化,且该变化是否是应该的。。。
int []days={2,3,4,5,6,7,8};
// 将该数组均减去首位+1,即-days[0]+1,左平移,变成以1开始的数组
for(int i=0;i<days.length;i++)
days[i]=days[i]-days[0]+1;
// 注意这里得到的结果不是我们想要的
// 因为首项一开始就变成了1.。后面减去的都是1了
//正确的方式--1
for(int i=days.length-1;i>=0;i--)
days[i]=days[i]-days[0];
//或者--2
t = days[0]
for(int i=0;i<days.length;i++)
days[i]=days[i]-days[0]+1;
//或者--3
for(int i=1;i<days.length;i++)
days[i]=days[i]-days[0]+1;
days[0]=1;
感觉最好的应该是第二种,直接暴露了易错点,而写法1则比较隐晦地避免易错点
int[]dp={1,2,3,4,5};
public int dp(int x){
for(int i=0;i<3;i++)
memo[x]=Math.max(memo[i],....)
}
//应该是
momo[x]=Math.max(memo[x],...)
//作为沙雕,我已经在这个上面犯了好几次错误