[JavaScript]内置对象Math初识,以及一些关于随机数的练习
Math 对象不是构造函数,不需要 new 实例化,直接使用。
Math.PI
即π,值为3.1415626535......
Math.max();
不传入参数时,返回 -Infinity。
传入的参数中有非 Number 类型的变量时,返回 NaN。
传入的参数全为 Number 类型的变量时,返回最大值。
Math.min();
不传入参数时,返回 Infinity。
传入的参数中有非 Number 类型的变量时,返回 NaN。
传入的参数全为 Number 类型的变量时,返回最小值。
Math.abs(); 返回绝对值。
Math.floor(); 向下取整。
Math.ceil(); 向上取整。
Math.round(); 四舍五入取整。
Math.random();
返回一个 [0, 1) 范围内的数值,注意取不到右端点。
-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
练习1:生成两个数之间的随机数
function rand(min, max) { return min + Math.random() * (max - min); }
练习2:生成两个数之间的随机整数(包含这两个整数)
function randomBetween(min, max) { min = Math.floor(min); max = Math.ceil(max); return Math.floor(Math.random() * (max - min + 1) + min); } console.log(randomBetween(100, 200));
练习3:猜数字。随机生成一个1-100的整数,用户进行猜测输入,返回大了/小了/猜对了!用户只有10次猜的机会。
var result = randomBetween(1, 100); var chances = 10; var guess = prompt('有一个1~100的整数,猜猜它是几?\n您有' + chances + '次机会。\n输入0退出。'); while (true) { chances--; if (guess === '0') { alert('谢谢参与。'); break; } else if (guess == result) { alert('恭喜猜对了数字!答案是:' + result); // 重新开始 result = randomBetween(1, 100); chances = 10; guess = prompt('有一个1~100的整数,猜猜它是几?\n您还有' + chances + '次机会。\n输入0退出。'); } else if (guess != result && chances === 0) { alert('很抱歉,次数已用完。\n这个数字应该是' + result); break; } else if (guess < result && guess > 0) { guess = prompt('太小啦,再猜一猜~\n您还有' + chances + '次机会。\n输入0退出。'); } else if (guess > result && guess <= 100) { guess = prompt('太大啦,再猜一猜~\n您还有' + chances + '次机会。\n输入0退出。'); } else { guess = prompt('输入无效,请输入一个1~100的整数。\n您还有' + chances + '次机会。\n输入0退出。'); } }
练习4:在1~m个数字中,已经抽取出a个随机数,需要不放回地从剩余的数字中抽取b个数。
以下代码对m位两位数的时候适用,并且生成的数字都是两位数的字符串这种
function getRandom(arr, all_num, need_num) { // 生成随机数组 var randomarr = [] for (var i = 1; i <= all_num; i++) { var n = i < 10 ? '0' + i : n = i + '' randomarr.push(n) } randomarr.sort(function () { return 0.5 - Math.random(); }); // 对比已有 for (var i = 0; i < randomarr.length; i++) { for (var j = 0; j < arr.length; j++) { if (randomarr[i] == arr[j]) { randomarr[i] = 'del' } } } // 删除已有 var newarr = [] randomarr.forEach(function (r) { if (r != 'del') newarr.push(r) }) // 长度 return newarr.slice(0, need_num) } var arr_old = ['31', '05', '09', '15'] var arr_new = getRandom(arr_old, 34, 8) console.log(arr_new)
// 最后的格式: arr_new = ['26', '23', '11', '24', '34', '33', '25', '04']