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在光标位置插入内容的实现代码
Jun 18 Javascript
通过JavaScript控制字体大小的代码
Oct 04 Javascript
js作用域及作用域链概念理解及使用
Apr 15 Javascript
innerHTML属性,outerHTML属性,textContent属性,innerText属性区别详解
Mar 13 Javascript
全面解析标签页的切换方式
Aug 21 Javascript
PHP实现本地图片上传和验证功能
Feb 27 Javascript
Angular之指令Directive用法详解
Mar 01 Javascript
react-router browserHistory刷新页面404问题解决方法
Dec 29 Javascript
electron实现qq快捷登录的方法示例
Oct 22 Javascript
使用ESLint禁止项目导入特定模块的方法步骤
Mar 04 Javascript
jquery+css实现Tab栏切换的代码实例
May 14 jQuery
Vue 同步异步存值取值实现案例
Aug 05 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 和 MySQL 基础教程(四)
2006/10/09 PHP
php通过rmdir删除目录的简单用法
2015/03/18 PHP
PHP中实现Bloom Filter算法
2015/03/30 PHP
使用PHPStorm+XDebug搭建单步调试环境
2017/11/19 PHP
PHP进阶学习之垃圾回收机制详解
2019/06/18 PHP
javascript 去字符串空格终极版(支持utf8)
2009/11/14 Javascript
单击复制文字兼容各浏览器的完美解决方案
2013/07/04 Javascript
正则表达式中特殊符号及正则表达式的几种方法总结(replace,test,search)
2013/11/26 Javascript
为Javascript中的String对象添加去除左右空格的方法(示例代码)
2013/11/30 Javascript
关于Javascript作用域链的八点总结
2013/12/06 Javascript
使用 TypeScript 重新编写的 JavaScript 坦克大战游戏代码
2015/04/07 Javascript
使用Node.js实现HTTP 206内容分片的教程
2015/06/23 Javascript
javascript实现在下拉列表中显示多级树形菜单的方法
2015/08/12 Javascript
jquery实现简单实用的弹出层效果代码
2015/10/15 Javascript
JS字符串长度判断,超出进行自动截取的实例(支持中文)
2017/03/06 Javascript
基于bootstrop常用类总结(推荐)
2017/09/11 Javascript
vue bus全局事件中心简单Demo详解
2018/02/26 Javascript
JavaScript 防盗链的原理以及破解方法
2020/12/29 Javascript
浅谈Python 集合(set)类型的操作——并交差
2016/06/30 Python
浅谈python中的实例方法、类方法和静态方法
2017/02/17 Python
python定时复制远程文件夹中所有文件
2019/04/30 Python
Tensorflow实现神经网络拟合线性回归
2019/07/19 Python
pygame实现俄罗斯方块游戏(对战篇1)
2019/10/29 Python
python实现用类读取文件数据并计算矩形面积
2020/01/18 Python
tensorflow 实现自定义梯度反向传播代码
2020/02/10 Python
Python定义函数实现累计求和操作
2020/05/03 Python
Python基于pyjnius库实现访问java类
2020/07/31 Python
python 利用matplotlib在3D空间绘制二次抛物面的案例
2021/02/06 Python
新西兰珠宝品牌:Michael Hill
2017/09/16 全球购物
关于逃课的检讨书
2014/01/23 职场文书
作弊检讨书1000字
2014/02/01 职场文书
2014年小学数学教师工作总结
2014/12/03 职场文书
团代会闭幕词
2015/01/28 职场文书
对外汉语教师推荐信
2015/03/27 职场文书
警告通知
2015/04/25 职场文书
SQL Server一个字符串拆分多行显示或者多行数据合并成一个字符串
2022/05/25 SQL Server