Day0:写在前面,关于写代码的意见与建议

每日鸡汤:上帝借由各种途径使人变得孤独,好让我们可以走向自己。—赫尔曼.黑塞

感觉不应该忘记刷题的初衷是全方面提高自己的代码编写能力,而不是单纯打卡,所以今天没有一上来就去无脑刷题,而停下来整理了一下卡哥训练营精华中的内容,希望今后在自己迷茫的时候能够有一些帮助,也希望自己真的能够坚持下来。
感谢卡哥的每日精华以及各类建议!!
本文参考:代码随想录算法训练营每日精华

  1. 递归要先学一下思想, 设计简单case, 进入到递归的最后一层然后执行逻辑慢慢倒着推一遍就可以知道逻辑了, 以后才可以正着就写出, 部分题目递归的本质是把每个问题都分成子问题, 子问题都解决了就等于解决了主问题。(或许这个思想可以应用到以后的OR中)。
  2. 遇到奇怪bug无法解决的时候卡哥建议:很多录友刷题的时候 也会有这样的问题,就是 好不容易代码写出来了,怎么改都不对,又不舍得删自己的代码,然后怎么看也看不出问题。 我也遇到过这种情况,我的经验是,代码全删连备份都不要, 重新写。(感觉自己应该改一下这个习惯了,以前遇到这种问题,大概率就是不停备份不停地修改,到最后其实改了很长时间也没有改出来,改出来了备份也不会再去看,感觉以后真的不要备份了,真就全部重写好了。)
  3. 鲁棒是因为Robust的音译,也可叫做健壮性。鲁棒性的意思就是,指程序能够判断输入是否合乎规范要求,并对不符合要求的输入予以合理的处理。容错性是鲁棒性的一个重要体现,当输入为某些负值条件时,程序是否能够得到合理的输出。
  4. 为什么要打日志?
    日志是什么?日志是你在代码运行时打印出来的一些数据和记录,是快速排查问题的好帮手!

轮次标记法打日志:

  • for循环内部出现问题建议
//for循环内部出现问题建议
for(int i = 0; i < n; i ++){
    //输出语句
    System.out.println(i + " " + 任意你下面可能用到的变量);  
    一系列逻辑操作
    System.out.println(i + " " + 任意你上面用到的变量);
    //注意i是必须要有的可以看轮次,如果一系列操作出出现了异常可以定位出第几次
}
//定位出第几次出现异常后,我们就可以细化粒度, 每一个操作逻辑打一个输出语句同时记得标记轮次
  • 链表出现问题,空指针异常
//链表出现问题 空针异常建议打法
ListNode list = new ListNode();
ListNode next = list.next;
int cnt = 0; //标记轮次
while(判断逻辑){
    逻辑操作
    System.out.println(cnt + "  " + list.val + " "  + next.val+ " " + 你想加的); //出现空针异常可以看一下上一轮的值
    cnt ++;
    //上面的找不出问题继续
    System.out.println((list.next == next) + " " + 一系列可能引起空针或者环的操作或者值或者地址)  
        }
  • 数组越界
//数组越界问题
int cnt = 0; 用来定位, 如果for循环可以每次都声明一次这个没关系的
System.out.println(cnt + " " + 下标); 
用到下标的任意代码
cnt ++;
System.out.println(cnt + " " + 下标);
//找到没有打的输出语句的前一轮次可以定位问题,因为我们的日志也打了输出语句所以你可以看到下标是多少
  • 判断是否进入if
//判断是否进入if
if(){
    //任意输出
}
//如果没进入在if上面打输出语句看你的变量是否正确
  • 树递归
//树递归
int cnt = 0;//轮次变量
void f(TreeNode root){ //递归的方法
    if(root == null) System.out.println(cnt); //放空针异常
else System.out.println(root.val +  " " + cnt); //根据root.val和cnt来判断到哪个节点了
cnt ++;
//逻辑操作(可能含有递归,没关系我们的cnt是全局的)
if(root == null) System.out.println(cnt); //放空针异常
else System.out.println(root.val +  " " + cnt);
cnt ++;
} 
//再来个层序
while(!q.isEmpty()){
    //任何获取到TreeNode后的操作和需要用到TreeNode的地方之前打一个输出即可
    //操作前操作后都需要打!!!!!!!!!!!
}

在代码运行前后将代码中出现的变量的取值显示出来(以前总喜欢自己慢慢手动去算,不太有效率;而用自带的debug去试错的时候,总感觉上下是不连贯的,它变它的,自己思路有一点难跟上,打出来,每一步会直观一些!!)

再次感谢代码随想录!

PS:
从前那些改代码痛苦的回忆开始攻击我了。
感觉自己还是应该沉下心慢慢来。

加油!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值