javascript中"/"运算符常见错误


Posted in Javascript onOctober 13, 2010

//二分查找健忘递归版本

function binary_search(arr,target,low,high){ 
if(low<high){ //至少包括两个元素 




var min=(low+high)/2; 
if(target>arr[min]) 
return binary_search(arr,target,min+1,high); 
else 
return binary_search(arr,target,low,min); 
}else if(low==high){ //只剩下一个元素 
if(arr[low]==target) 
return low; 
else return -1; 
}else if(low>high){ //空,当用arr.length-1来计算arr的初始high时才要考虑 
return -1; 
} 
}

var arr=[1,2,3,4,5,6];
alert(binary_search(arr,3,0,arr.length-1));
晚上看数据结构,顺便就用js写了个二分查找算法(代码如上),然后随便写了个数组作为测试数据(如上),按照设想应该是输出查找目标的下标,但是意向不到的事情发生了,只见CPU霎时狂转,约两秒后,浏览器自动终止了脚本的运行,然后就一阵纳闷。

根据经验来看,应该是在脚本运行的过程出现了死循环,自习看了一下算法,没有发现什么问题(干脆直接照着课本上的代码输入总不会错了吧),但是问题依旧。于是就在第一个判断条件里面加了个输出语句,如下:

//二分查找健忘递归版本function binary_search(arr,target,low,high){ 
if(low<high){ //至少包括两个元素



 

var min=(low+high)/2; 



 if(target>arr[min]) 
return binary_search(arr,target,min+1,high); 

else 


return binary_search(arr,target,low,min); 
}else if(low==high){ //只剩下一个元素 

if(arr[low]==target) 


return low; 

 else return -1; 
}else if(low>high){ //空,当用arr.length-1来计算arr的初始high时才要考虑 

return -1; 
} 
}

运行,弹出个对话框,里面数字为2.5~~突然有种恍然大悟同时想要砸电脑的冲动。

出错原因以及总结:

javascript里面的"/"运算符跟C++里面的"/"运算符不一样,后者自动取整,前者若非整除则会得到小数(比如说5/2=2.5)。
解决方案:

(1)var min=parseInt((low+high)/2);
(2)var min=Match.floor((low+high)/2);

Javascript 相关文章推荐
JavaScript 私有成员分析
Jan 13 Javascript
javascript权威指南 学习笔记之null和undefined
Sep 25 Javascript
如何判断元素是否为HTMLElement元素
Dec 06 Javascript
JavaScript代码实现禁止右键、禁选择、禁粘贴、禁shift、禁ctrl、禁alt
Nov 17 Javascript
JavaScript 数组的深度复制解析
Nov 02 Javascript
自定义require函数让浏览器按需加载Js文件
Nov 24 Javascript
jQuery基于ajax操作json数据简单示例
Jan 05 Javascript
jQuery Masonry瀑布流插件使用方法详解
Jan 18 Javascript
使用 Node.js 模拟滑动拼图验证码操作的示例代码
Nov 02 Javascript
详解JS实现系统登录页的登录和验证
Apr 29 Javascript
Vue中添加滚动事件设置的方法详解
Sep 14 Javascript
详解Vue3使用axios的配置教程
Apr 29 Vue.js
javascript一个无懈可击的实例化XMLHttpRequest的方法
Oct 13 #Javascript
理解Javascript_05_原型继承原理
Oct 13 #Javascript
JavaScript 打地鼠游戏代码说明
Oct 12 #Javascript
理解Javascript_03_javascript全局观
Oct 11 #Javascript
理解Javascript_02_理解undefined和null
Oct 11 #Javascript
理解Javascript_01_理解内存分配原理分析
Oct 11 #Javascript
javascript getElementsByClassName实现代码
Oct 11 #Javascript
You might like
成本8450万,票房仅2亿,口碑两极分化,又一部DC电影扑街了
2020/04/09 欧美动漫
Mysql的Root密码忘记,查看或修改的解决方法(图文介绍)
2013/06/14 PHP
PHP与Ajax相结合实现登录验证小Demo
2016/03/16 PHP
php错误日志简单配置方法
2016/07/11 PHP
Javascript 获取字符串字节数的多种方法
2009/06/02 Javascript
Prototype Template对象 学习
2009/07/19 Javascript
基于jQuery的Spin Button自定义文本框数值自增或自减
2010/07/17 Javascript
jquery中通过过滤器获取表单元素的实现代码
2011/07/05 Javascript
jquery选择器、属性设置用法经验总结
2013/09/08 Javascript
《JavaScript DOM 编程艺术》读书笔记之JavaScript 语法
2015/01/09 Javascript
可以浮动某个物体的jquery控件用法实例
2015/07/24 Javascript
D3.js实现散点图和气泡图的方法详解
2016/09/21 Javascript
node.js平台下的mysql数据库配置及连接
2017/03/31 Javascript
详谈js原型继承的一些问题
2017/09/06 Javascript
浅谈Vue下使用百度地图的简易方法
2018/03/23 Javascript
Google开源的Python格式化工具YAPF的安装和使用教程
2016/05/31 Python
python制作mysql数据迁移脚本
2019/01/01 Python
使用python的pexpect模块,实现远程免密登录的示例
2019/02/14 Python
python接口自动化(十六)--参数关联接口后传(详解)
2019/04/16 Python
pytorch torch.expand和torch.repeat的区别详解
2019/11/05 Python
python梯度下降算法的实现
2020/02/24 Python
python实现井字棋小游戏
2020/03/04 Python
解决keras GAN训练是loss不发生变化,accuracy一直为0.5的问题
2020/07/02 Python
python cv2.resize函数high和width注意事项说明
2020/07/05 Python
Python类的继承super相关原理解析
2020/10/22 Python
跑步、骑行和铁人三项的高性能眼镜和服装:ROKA
2018/07/06 全球购物
法国设计制造的扫帚和刷子:Andrée Jardin
2018/12/06 全球购物
Johnson Fitness澳大利亚:高级健身器材
2021/03/16 全球购物
工商管理专业应届生求职信
2013/11/04 职场文书
幼儿园消防安全制度
2014/01/26 职场文书
庆中秋节主题活动方案
2014/02/03 职场文书
护理毕业生自我鉴定
2014/02/11 职场文书
员工工作表扬信
2015/05/05 职场文书
Keras在mnist上的CNN实践,并且自定义loss函数曲线图操作
2021/05/25 Python
python 爬取天气网卫星图片
2021/06/07 Python
教你如何让spark sql写mysql的时候支持update操作
2022/02/15 MySQL