javascript小实例,编写一个方法,实现从n-m个数中随机选出一个整数
别怪我是一个闷葫芦,没那么多花哨的语言,废话不多说,先说说小实例的要求:
编写一个方法,实现从n-m个数中随机选出一个整数,要求:传递的参数不足两个或者不是有效数字,返回[0-1]之间的随机数,需要解决n和m两个数大小问题,如果m<n,两个参数的值进行交换;
看到这个求随机数的小实例,相信很多人都会写,也写过很多相关的程序代码,所以,重要的知识点没有,旨在给初学者一些启发,大牛可略过!
既然是给初学者看的,那么我们就从最基本的东西一步一步的看,便于理解,先拆分一下要求吧:
1.求一个n-m的随机整数;
2.参数不足两个或者不是有效数字,返回[0-1]的随机数;
3.解决两个参数的大小问题。
基本上可以分为这3部分了,那我们先开始最简单的0-1的随机数(核心函数Math.random)
var num = Math.random(0,1); //0-1
既然能得到0-1之间的随机数,那能不能得到0-100之间的随机数呢,于是就有了下面的:
var num = parseInt(Math.random(0,1)*100); //0-100
这个为什么要用parseInt()(取整函数),是因为得到的随机数是带小数点的,取整就能得到0-100之间的整数,获取0-10也就很简单了,只需要改乘数就可以了
var num = parseInt(Math.random(0,1)*10); //0-10
那么,我想得到5到10之间的整数,要怎么做呢,很简单,我们可以拆分一下,5-10,最小是5,最大是10,那么让5+n,n只要在0-5之间就能满足条件,所以就是这样
var num = parseInt(Math.random(0,1)*5) + 5; //5-10
再来一个例子,实现50-100之间的整数
var num = parseInt(Math.random(0,1)*50) + 50; //50-100
从上面的几个例子可以总结一个规律,如果我们想实现n-m之间的整数,则可以写成这样
var num = parseInt(Math.random(0,1)*(m-n)) + n;
那第一个条件就满足了,第2,第3个条件无非就是判断条件了:
function randomNum(){
var arg = arguments; //获取参数集合
var num = null;
if(arg.length<2 || arg.length>2 || isNaN(arg[0]) || isNaN(arg[1])){ //当参数小于2个或者大于2个或者不为数字的时候
num = Math.random(0,1);
}else if(arg[0]>arg[1]){//如果第一个参数大于第二个参数
num = parseInt(Math.random(0,1)*(parseInt(arg[0])-parseInt(arg[1]))) + parseInt(arg[1]);
}else{ //第一个参数小于第二个参数,且为数字
num = parseInt(Math.random(0,1)*(parseInt(arg[1])-parseInt(arg[0]))) + parseInt(arg[0]);
}
return num;
}
console.log(randomNum('30','40')); //30-40
console.log(randomNum(30,40)); //30-40
细心的人可以看到好多的parseInt(),先从里面的说起吧,里面的parseInt(arg[0]),parseInt(arg[1])是为了防止当数字为字符串时,会把数字当字符串使用,就成了字符链接了,外面的parseInt()则是为了取随机整数的,明白了吗?
得到的效果就是下面的2个输出,如果不满足条件,则返回0-1之间的随机数,如果你想让参数是字符串数字也返回0-1时,只需要加一个判断,判断参数是否是字符串,是就返回0-1。
是不是很简单,对就是这么简单,今天不扩展,随机数还是有很多的大用途的,有机会写一下相关的应用!
行文仓促!有理解的不正确的或者是遗漏的东西,万望批评指正!不胜感激!
javascript小实例,编写一个方法,实现从n-m个数中随机选出一个整数的更多相关文章
- javascript小实例,多种方法实现数组去重问题
废话不多说,直接拿干货! 先说说这个实例的要求:写一个方法实现数组的去重.(要求:执行方法,传递一个数组,返回去重后的新数组,原数组不变,实现过程中只能用一层循环,双层嵌套循环也可写,只做参考): 先 ...
- OC小实例关于init 方法不小心的错误
OC小实例关于init 方法不小心的错误 正视遇到的每一个错误 在一个遥控器类操控小车玩具的小实例项目中,我采用组合的方式,将遥控器拥有小汽车对象(has a)关系,而不是继承(is a)关系. 想 ...
- php array_rand()函数从数组中随机选择一个或多个元素
php使用array_rand()函数从数组中随机选择一个或多个元素的方法. 使用array_rand() 函数从数组中随机选出一个或多个元素,并返回. array_rand(array,numbe ...
- JavaScript小实例:拖拽应用(二)
经常在网站别人的网站的注册页中看到一个拖拽验证的效果,就是它的验证码刚开始不出来,而是有一个拖拽的条,你必须将这个拖拽条拖到底,验证码才出来,说了感觉跟没说一样,你还是不理解,好吧,我给个图你看看: ...
- javascript小实例,拖拽应用(一)
前面我们将了一下拖拽的基本思想,理论是有了,那实践呢,可以运用到什么地方呢?下面就给大家带来一个用拖拽思想写的一个小实例,供大家参考,大致效果看下图: 就是这样一个简单的一个拖拽条,你可以把它理解为滚 ...
- JavaScript 小实例 - 表单输入内容检测,对页面的增删改
JavaScript 小实例 - 表单输入内容检测,对页面的增删改 效果体验地址:https://xpwi.github.io/js/JavaScript01/jsForm.html 功能: 1.向页 ...
- JS window对象 返回下一个浏览的页面 forward()方法,加载 history 列表中的下一个 URL。
返回下一个浏览的页面 forward()方法,加载 history 列表中的下一个 URL. 如果倒退之后,再想回到倒退之前浏览的页面,则可以使用forward()方法,代码如下: window.hi ...
- JavaScript中随机打乱一个数组
JavaScript中随机打乱一个数组 function shuffle(arr) { let i = arr.length; while (i) { let j = Math.floor(Math. ...
- 在ASP.NET MVC应用程序中随机获取一个字符串
在开发ASP.NET MVC应用程序时,有可能需要一个随机字符串,作为密码或是验证码等. 如果你需要的是SQL版本,可以参考<密码需要带特殊字符(二)>http://www.cnblogs ...
随机推荐
- 【Golang】如何统一处理HTTP请求中的异常捕获
最近写GOLANG项目,不使用框架,路由选择httprouter 现在想实现一个需求:在不修改httprouter源码的前提下,对所有注册的路由handle进行异常捕获. 大家都知道golang使用p ...
- 基于UML网络教学管理平台模型的搭建
一.基本信息 标题:基于UML网络教学管理平台模型的搭建 时间:2013 出版源:网络安全技术与应用 领域分类:UML:网络教学管理平台:模型 二.研究背景 问题定义:网络教学管理平台模型的搭建 难点 ...
- jQuery-爱奇艺图片切换
<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>& ...
- 133. leetcode-Clone Graph
拷贝图,可以一边遍历一边拷贝 DFS class Solution { public: Node* cloneGraph(Node* node) { unordered_map<int, Nod ...
- 推导正交投影(Orthographic Projection)
定义六个面 left right bottom top near far 然后三个轴分开考虑 x轴 视椎体的x范围在[l,r],我们要变换到[-1,1] 1 减去l变换到[0, r-l] 2 乘以 ...
- 搭建servlet+jsp环境
c3p0: <?xml version="1.0" encoding="UTF-8"?><c3p0-config> <named- ...
- <mvc:annotation-driven> 中的HttpMessageConverters 的理解
用烂的图 配置一个或多个HttpMessageConverter类型以用于转换@RequestBody方法 参数和@ResponseBody方法返回值. 使用此配置元素是可选的. 此处提供的Http ...
- 漏洞利用教程:msfpayload 和 Backdooring EXEs
漏洞利用教程:msfpayload 和 Backdooring EXEs 此版本的PrimalSec漏洞教程系列将介绍如何使用msfpayload创建各种有效负载.msfpayload是Metaspl ...
- linux创建用户并设置密码
1.在root权限下,useradd只是创建了一个用户名,如(useradd+用户名),它并没有在/home目录下创建同名文件夹,也没有创建密码,因此利用这个用户登录系统,是登录不了的,为了避免这样的 ...
- Testing - 敏捷测试
敏捷测试(Agile Testing) SM= Scrum Master PO= Product Owner PB= Product Backlog SB= Sprint Backlog Scrum ...