编写一个js函数,该函数有一个n(数字类型),其返回值是一个数组,该数组内是n个随机且不重复的整数,且整数取值范围是[2,32]
题目解读
输入一个数字类型的参数n,会返回一个包含2到32的数字的数组,数组长度是n(比如你输入数字是2,就会返回数组长度为2的数组); 数组里面的数字用 随机函数 生成,然后还要检查数字是否会重复,也要考虑负数情况等边界条件
知识点
Math.ceil(); //向上取整。 |
Math.ceil(Math.random()*10); // 获取从1到10的随机整数 ,取0的概率极小。 |
直接使用 parseInt,parseFloat 或 Number 将一个非数字的值转化为数字时,表达式返回 NaN
'abc' - 3 // NaN |
isNaN() 是一个全局方法,它的作用是检查一个值是否能被 Number() 成功转换 。 如果能转换成功,就返回 false,否则返回 true
isNaN(NaN) // true 不能转换 |
生成随机数方法总结
生成[1,max]的随机数,公式如下:
// max - 期望的最大值 |
生成[0,max]到任意数的随机数,公式如下:
// max - 期望的最大值 |
生成[min,max]的随机数,公式如下:
// max - 期望的最大值 |
编程思维:
可用 —> 健壮 —> 可靠 —> 宽容
健壮:
- 最基本的兼容性处理、边界处理、异常处理、用户输入校验
- 对n的取值范围进行校验;对n是否为数字进行校验;对n是否存在进行校验
宽容:
- n是一个字符串数字,是否允许进入处理流程?是的话,经验系数*1.1
- n是一个含有小数的数字,是否允许进入处理流程?是的话,经验系数*1.1
- 代码是否有足够多且清晰的注释?是的话,经验系数*1.2
- 调整[2,32]的范围,你的代码是否可以快速调整甚至不用调整?是的话,经验系数*1.2
伪代码
// 生成一个随机数 |