一个算法题目 写的没有bug,是件不easy的事情

必需要考虑全面,事实上就是你算法过程中,每一个变量是否适用,你的算法是在什么样的前提以下展开的

这个和參数检查是另外一件事情。參数检查被说的好像是一个必需要做的过程。事实上这个跟详细实现由关系

假设详细实现无关參数,那就不须要做什么參数检查

例如说 非常多时候都要检查传入參数是不是null,假设函数要取这个地址的值。那必需要检查这个指针是否是null,这跟參数检查无关

举个样例

Implement strStr()

Implement strStr().

Returns a pointer to the first occurrence of needle in haystack, or null if needle is not part of haystack.

这个是leetcode上面的一个题目。咱们就写最暴力的方法。可是做到bug-free也不是要非常细致的

我第一次的代码是

    public String strStr(String haystack, String needle) {
for (int i = 0; i < haystack.length(); i++) {
for(int j = 0;j<needle.length();j++){
if(haystack.charAt(i+j) == needle.charAt(j)){
if(j == needle.length() -1)
return haystack.substring(i);
else
continue;
}else{
break;
}
} }
return null;
}

这个错误是考虑不全面,事实上在写i+j 时候就该考虑 i+j 是不是越界了。

看我的第二次代码

   public String strStr(String haystack, String needle) {
if(haystack == null || haystack.length() == 0){
return null;
}
if(needle == null || needle.length() == 0){
return haystack;
}
for (int i = 0; i < haystack.length(); i++) {
for(int j = 0;j<needle.length();j++){
if(i + j >= haystack.length()) return null;
if(haystack.charAt(i+j) == needle.charAt(j)){
if(j == needle.length() -1)
return haystack.substring(i);
else
continue;
}else{
break;
}
} }
return null;}

这次差点儿就是正确了,可是还是没过,把最開始那两句调整了位置。就过去了。最后代码例如以下。

    public String strStr(String haystack, String needle) {
if(needle == null || needle.length() == 0){
return haystack;
}
if(haystack == null || haystack.length() == 0){
return null;
} for (int i = 0; i < haystack.length(); i++) {
for(int j = 0;j<needle.length();j++){
if(i + j >= haystack.length()) return null;
if(haystack.charAt(i+j) == needle.charAt(j)){
if(j == needle.length() -1)
return haystack.substring(i);
else
continue;
}else{
break;
}
} }
return null; }

通过这个样例。我认为写代码时候着急不得,把变量的适用条件都考虑清楚了,前后关系都要想清楚了

写bug-free 的code的更多相关文章

  1. 花了2小时写bug

    程序员的工作,写bug,修bug,改bug 写了2小时逻辑关系,没写明白 比昨天多了一个返回上一层的功能 也很简单,清除下数组内容即可 emm..明天继续深究吧 dic = { "植物&qu ...

  2. 程序员生存之道,多写bug!

    1.代码写得好,bug少,看起来就像闲人. 2.注释多,代码清晰,任何人接手非常方便,看起来谁都都可以替代. 3.代码写得烂,每天风风火火改bug,各种救火,解决各种线上重大问题,于是顺理成章为公司亮 ...

  3. 10种常见OOM分析——手把手教你写bug

    点赞+收藏 就学会系列,文章收录在 GitHub JavaKeeper ,N线互联网开发必备技能兵器谱,笔记自取 在<Java虚拟机规范>的规定里,除了程序计数器外,虚拟机内存的其他几个运 ...

  4. 测试面试话题8:测试人员如何让开发少写bug?

    在测试过程中和不同开发合作,往往会发现一些bug都是大多数开发人员常出现的错误,为了帮助开发人员,也减少测试的重复工作量,非常有必要将以往出现的bug做整理,分析原因,让开发知道这些bug, 避免再次 ...

  5. 怎么避免写bug?

    1:关注可能的业务逻辑异常:业务逻辑异常 可以通过各种输入输出 和 预期进行比较 即可很快发现. 2:关注可能的运行逻辑异常: 如 copy对象: 对象引用等 这类异常只看代码逻辑时很难发现的:代码写 ...

  6. 怎么用jira写bug

    工具/原料 有网的电脑 方法/步骤1: 打开公司给的访问JIRA的链接,输入公司给你注册的账号和密码,点击登录 方法/步骤2: 点击JIRA主菜单上的“创建”,进入编辑bug界面 方法/步骤3: 项目 ...

  7. 别再写 bug 了,避免空指针的 5 个案例!

    空指针是我们 Java 开发人员经常遇到的一个基本异常,这是一个极其普遍但似乎又无法根治的问题. 本文,栈长将带你了解什么是空指针,还有如何有效的避免空指针. 什么是空指针? 当一个变量的值为 nul ...

  8. [bug] Unrecognized token 'code': was expecting (JSON String, Number, Array, Object,'true', 'false' or 'null')

    JSON格式有误,需用JSON.stringify()函数转换一下 参考 https://www.cnblogs.com/sunyanblog/p/13788740.html https://www. ...

  9. 写Bug时,需要注意的几点3

    在对象之间搬移特性 类往往会因为承担过多责任而变得臃肿不堪. (Move Method)搬移函数 含义:在程序中,里面的一个函数与其类外面的一个类或函数有着紧密的调用或者被调用,则需要对其函数内部的表 ...

  10. 写Bug时,需要注意的几点 02

    重构2-重新组织函数 重构的基本技巧--小步前进,频繁测试. 模式是你希望到达的目标,重构则是到达之路. 在单进程软件中,你永远不必操心多么频繁地调用某个函数,因为函数的调用成本很低.但在分布式软件中 ...

随机推荐

  1. C#做完一个网站怎么发布?

    前段时间在局域网上发布了一个自己做的网站,发布过程中遇到了不少问题.下面就发布过程和发布过程中遇到的问题与(你)大家一起分享一下,希望对(你)大家有所帮助吧! 在将ASP.NET网站发布到服务器之前需 ...

  2. LayUI-Table表格渲染

    记项目中又一表格使用方法,项目首选是使用BootstrapTable的,但是经过多番查证与调试,始终没有把固定列的功能调试成功,找到的成功的例子原样照搬都不行,文件引入也都没有问题,实在搞不懂了,如果 ...

  3. Spider_basic

    网络爬虫 定义:网络蜘蛛.网络机器人,抓取网络数据的程序 总结:用Python程序去模仿人去访问网站,模仿的越逼真越好 目的:通过有效的大量数据分析市场走势.公司决策 企业获取数据的方式 公司自有数据 ...

  4. Java vs C++:子类覆盖父类函数时缩小可访问性的不同设计

    Java 和 C++ 都是面向对象的语言,允许对象之间的继承.两个语言的继承都设置有允许子类覆盖父类的“虚函数”,加引号是因为 Java 中没有虚函数这一术语,但是我们的确可以把 Java 的所有函数 ...

  5. DC中为什么要用Uniquify?

    转自:http://blog.sina.com.cn/s/blog_68c493870101exl7.html 为了在layout中进行时钟树的综合,网表在DC中必须被uniquified.所谓uni ...

  6. C++ tab键实现自动补全输入功能

    一.简介 由于项目中写了个测试的控制台程序,是每次读取一行,即通过getline()来实现的,所以每次必须输入全路径名称,才能实现运行. 大家都觉得麻烦,就写了个tab键自动选择补全的. 目前基本可实 ...

  7. IOS蓝牙项目总结

    常见的蓝牙标准有2.0和4.0.   特点 2.0 1.适用于数据量比较大得传输,比如音乐.语音2.IOS开发中,要求设备是经过MFI认证 4.0 1.适用于实时性比较高的数据传输,比如遥控类的鼠标. ...

  8. HDU 2147kiki's game

    KIKI和zz一起玩跳棋游戏,KIKI先.跳棋棋盘有n行m列.在顶行的最右侧位置放上一枚硬币.每次每个人可以把硬币移动到左边,下边或是左下边的空格中.最后不能移动硬币的那个人将输掉比赛. P点:即必败 ...

  9. P2P系统哪家强,功能其实都一样

    现在的P2P平台有好几千家了,了解了其中的几十家,发现用户端的P2P界面功能都差不多.下面来做个简要的总结: 1.通用功能  注册.登录  2.投资理财  针对理财人的投标.债权转让  3.借款申请  ...

  10. 【EasyUi】页面设计必学之Layout

    接触EasyUi也快一年了.非常多时候都把重心放在实现功能方面.要显示大量数据了就用DataGrid,要实现分页效果了就想着Tabs,如此等等,再接下来就是考虑CSS.js怎样让这个功能实现的更好. ...