一个算法题目 写的没有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. Android 技巧 - Debug 判断不再用 BuildConfig

    Android 开发中一般会通过 BuildConfig.DEBUG 判断是否是 Debug 模式,从而做一些在 Debug 模式才开启的特殊操作,比如打印日志.这样好处是不用在发布前去主动修改,因为 ...

  2. [Angular] Implement a custom form component by using control value accessor

    We have a form component: <label> <h3>Type</h3> <workout-type formControlName=& ...

  3. Altium Designer中死铜的问题

  4. APP功能点测试

    一.移动互联网特点: 1,用户体验至上:精准的用户体验 2,核心竞争力:市场占有率和业务创新能力 3,营销模型:通过口碑传播吸引客户,随之参与互动(如分享等,对接口测试要求高) 二.项目特点: 1,开 ...

  5. 第一个hello word 驱动载入失败--------

    今天尝试自己载入第一个驱动模块,依据惯例hello word 然后失败了,如今说明我的操作过程.请个位看看. 首先我的内核版本号: 模块代码与MAKEFILE #include<linux/in ...

  6. Android 蓝牙扫描代码

    /** * Created by rbq on 2016/11/1. */ import android.bluetooth.BluetoothAdapter; import android.blue ...

  7. Java与模式:装饰(Decorator)模式

    装饰模式使用被装饰类的一个子类的实例.把client的调用委派到被装饰类,装饰模式的关键在于这样的扩展是全然透明的.   装饰模式在Java种使用也非常广泛,比方我们在又一次定义button.对话框等 ...

  8. Android多线程研究(9)——读写锁

    一.什么是锁 在Java的util.concurrent.locks包下有关于锁的接口和类如下: 先看一段代码: package com.codeing.snail.test; public clas ...

  9. LIVE555源代码研究之四:MediaServer (一)

    LIVE555源代码研究之四:MediaServer (一) 从本篇文章開始我们将从简单server程序作为突破点,深入研究LIVE555源代码. 从前面的文章我们知道.不论什么一个基于LIVE555 ...

  10. 对touch事件传递的简单理解

    对View事件传递的理解.看的这篇. 对事件传递有了大致的了解. onInterceptTouchEvent 函数决定是否将事件拦截,拦截之后,该控件的全部子控件接收不到这个事件.onTouchEve ...