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 相关文章推荐
jQuery中mouseover事件用法实例
Dec 26 Javascript
jQuery页面刷新(局部、全部)问题分析
Jan 09 Javascript
javascript检测移动设备横竖屏
May 21 Javascript
Angular 2应用的8个主要构造块有哪些
Oct 17 Javascript
jQuery中checkbox反复调用attr('checked', true/false)只有第一次生效的解决方法
Nov 16 Javascript
Json按某个键的值进行排序
Dec 22 Javascript
jQuery实现表格奇偶行显示不同背景色 就这么简单
Mar 13 Javascript
Angular 4依赖注入学习教程之组件服务注入(二)
Jun 04 Javascript
JS简单判断是否在微信浏览器打开的方法示例
Jan 08 Javascript
elementUI Tree 树形控件的官方使用文档
Apr 25 Javascript
IDEA安装vue插件图文详解
Sep 26 Javascript
element 动态合并表格的步骤
Dec 31 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安全编程之加密功能
2006/10/09 PHP
php中autoload的用法总结
2013/11/08 PHP
php数组去重复数据示例
2014/02/25 PHP
ThinkPHP调用百度翻译类实现在线翻译
2014/06/26 PHP
PHP实现的统计数据功能详解
2016/12/06 PHP
基于Jquery插件开发之图片放大镜效果(仿淘宝)
2011/11/19 Javascript
jQuery function的正确书写方法
2013/08/02 Javascript
jquery实现更改表格行顺序示例
2014/04/30 Javascript
ECMAScript 5中的属性描述符详解
2015/03/02 Javascript
在JavaScript中操作数组之map()方法的使用
2015/06/09 Javascript
聊一聊JavaScript作用域和作用域链
2016/05/03 Javascript
Angularjs使用directive自定义指令实现attribute继承的方法详解
2016/08/05 Javascript
浅谈Javascript事件对象
2017/02/05 Javascript
Canvas实现放射线动画效果
2017/02/15 Javascript
jQuery实现下拉菜单的实例代码
2017/06/19 jQuery
js实现登录与注册界面
2017/11/01 Javascript
详解Angular-ui-BootStrap组件的解释以及使用
2018/07/13 Javascript
详解webpack打包nodejs项目(前端代码)
2018/09/19 NodeJs
layui对工具条进行选择性的显示方法
2019/09/19 Javascript
Vuex,iView UI面包屑导航使用扩展详解
2019/11/04 Javascript
[43:24]2018DOTA2亚洲邀请赛3月29日 小组赛A组 LGD VS Liquid
2018/03/30 DOTA
python使用os模块的os.walk遍历文件夹示例
2014/01/27 Python
python进程管理工具supervisor使用实例
2014/09/17 Python
python中实现定制类的特殊方法总结
2014/09/28 Python
利用Python绘制MySQL数据图实现数据可视化
2015/03/30 Python
Python模拟百度登录实例详解
2016/01/20 Python
python 调用win32pai 操作cmd的方法
2017/05/28 Python
Python用户推荐系统曼哈顿算法实现完整代码
2017/12/01 Python
Python实现正弦信号的时域波形和频谱图示例【基于matplotlib】
2018/05/04 Python
运行django项目指定IP和端口的方法
2018/05/14 Python
python字符串下标与切片及使用方法
2020/02/13 Python
css3 伪类选择器快速复习小结
2019/09/10 HTML / CSS
使用CSS3制作版头动画效果
2020/12/24 HTML / CSS
美国专业汽车音响和移动电子产品零售商:Car Toys
2019/05/13 全球购物
导游词之阳朔遇龙河
2019/12/16 职场文书
Android开发手册自定义Switch开关按钮控件
2022/06/10 Java/Android