程序编写中易错的case

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],...)

//作为沙雕,我已经在这个上面犯了好几次错误

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值