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字符串拼接的效率问题
Dec 25 Javascript
Javascript继承机制的设计思想分享
Aug 28 Javascript
IE的有条件注释判定IE版本详解(附实例代码)
Jan 04 Javascript
JS获取计算机mac地址以及IP的实现方法
Jan 08 Javascript
JavaScript实现的in_array函数
Aug 27 Javascript
基于jQuery实现表单提交验证
Nov 24 Javascript
常用的jQuery前端技巧收集
Dec 24 Javascript
分享一个常用的javascript静态类
Dec 31 Javascript
jQuery禁用键盘后退屏蔽F5刷新及禁用右键单击
Jan 22 Javascript
vue.js响应式原理解析与实现
Jun 22 Javascript
Cocos2d实现刮刮卡效果
Dec 20 Javascript
Vue多组件仓库开发与发布详解
Feb 28 Javascript
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
PHP实现多条件查询实例代码
2010/07/17 PHP
PHP批量采集下载美女图片的实现代码
2013/06/03 PHP
2014年最新推荐的10款 PHP 开发框架
2014/08/01 PHP
php获取随机数组列表的方法
2014/11/13 PHP
php读取文件内容到数组的方法
2015/03/16 PHP
使用ThinkPHP生成缩略图及显示
2017/04/27 PHP
PHP封装的数据库模型Model类完整示例【基于PDO】
2019/03/14 PHP
mysqli扩展无法在PHP7下升级问题的解决
2019/09/10 PHP
JS保存、读取、换行、转Json报错处理方法
2013/06/14 Javascript
Jquery操作下拉框(DropDownList)实现取值赋值
2013/08/13 Javascript
浅谈Javascript 执行顺序
2013/12/18 Javascript
jquery事件绑定解绑机制源码解析
2016/09/19 Javascript
Angular 4依赖注入学习教程之ClassProvider的使用(三)
2017/06/04 Javascript
nodejs body-parser 解析post数据实例
2017/07/26 NodeJs
Vue组件之全局组件与局部组件的使用详解
2017/10/09 Javascript
利用pm2部署多个node.js项目的配置教程
2017/10/22 Javascript
关于vue面试题汇总
2018/03/20 Javascript
对vue 键盘回车事件的实例讲解
2018/08/25 Javascript
微信小程序单选radio及多选checkbox按钮用法示例
2019/04/30 Javascript
JSX在render函数中的应用详解
2019/09/04 Javascript
Vue实现可移动水平时间轴
2020/06/29 Javascript
详解vue中在父组件点击按钮触发子组件的事件
2020/11/13 Javascript
[01:06:59]完美世界DOTA2联赛PWL S2 Magma vs FTD 第一场 11.29
2020/12/02 DOTA
安装Python和pygame及相应的环境变量配置(图文教程)
2017/06/04 Python
Python 经典算法100及解析(小结)
2019/09/13 Python
将python包发布到PyPI和制作whl文件方式
2019/12/25 Python
详解CSS3中Media Queries的相关使用
2015/07/17 HTML / CSS
日本钓鱼渔具和户外用品网上商店:naturum
2016/08/07 全球购物
露营世界:Camping World
2017/02/02 全球购物
Lookfantastic挪威官网:英国知名美妆购物网站
2017/07/26 全球购物
十佳中学生事迹材料
2014/06/02 职场文书
法学自荐信
2014/06/20 职场文书
房屋产权共有协议书范本
2014/11/03 职场文书
学校隐患排查制度
2015/08/05 职场文书
保险公司2016开门红口号集锦
2015/12/24 职场文书
Mysql binlog日志文件过大的解决
2021/10/05 MySQL