一个算法题目 写的没有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. HTML基础第四讲---图像

    转自:https://blog.csdn.net/likaier/article/details/326735 图像,也就是images,在html语法中用img来表示,其基本的语法是:   < ...

  2. 1.2 Use Cases中 Stream Processing官网剖析(博主推荐)

    不多说,直接上干货! 一切来源于官网 http://kafka.apache.org/documentation/ Stream Processing 流处理 Many users of Kafka ...

  3. golang sort

    package main import ( "fmt" "strings" "sort" ) type Animals []string f ...

  4. 推荐一个iOS应用UI界面设计站点

    Patterns是一个分享ios应用UI界面的站点,专注于分享iOS应用UI界面的细节.依照设计元素进行分类,依照iOS经常使用功能对各类UI进行分类展示. 链接:url=http%3A%2F%2Fw ...

  5. amazeui学习笔记--css(常用组件12)--面板Panel

    amazeui学习笔记--css(常用组件12)--面板Panel 一.总结 1.面板基本样式:默认的 .am-panel 提供基本的阴影和边距,默认边框添加 .am-panel-default,内容 ...

  6. IOS总结

    1.Difference between shallow copy and deep copy?
浅复制和深复制的区别?
答案:浅层复制:只复制指向对象的指针,而不复制引用对象本身.
深层复制:复制引 ...

  7. numpy 高阶函数 —— np.histogram

    np.diff(a, n=1, axis=-1):n 表示差分的阶数: >> x = np.array([1, 2, 4, 7, 0]) >> np.diff(x) array ...

  8. vuex概念总结及简单使用实例

    原文 简书原文:https://www.jianshu.com/p/0546983f5997 大纲 1.什么是Vuex 2.什么是“状态管理模式”? 3.什么情况下应该使用 Vuex? 4.Vuex和 ...

  9. [Algorithms] Binary Search Algorithm using TypeScript

    (binary search trees) which form the basis of modern databases and immutable data structures. Binary ...

  10. Win7下多线程中OpenFileDialog和SaveFileDialog失效的解决办法(转载)

    在程序中,通常会使用独立线程来操作OpenFileDialog或者SaveFileDialog控件,但是在某些情况下(Win7系统下)调用 ShowDialog方法并不显示选择路径对话框.此时需要对启 ...