用 javascript 实现随机抽奖 ( 从 1 到 输入值之间任取一个整数值)
2012-08-03 23:49
483 查看
这个脚本用 javascript 实现随机抽奖 ( 从 1 到 输入值之间任取一个整数值)。
比如输入10, 点击 Start 就会显示从1到10之间的随机整数。
结果大家自己试试
但是上面 script 有的 bug 是,文本框 应该只接受正整数,而脚本没有对输入是否为字符串,负数,小数进行验证。
于是更改如下:
这回基本完成了。但是仍然有一个问题。
就是如果我们输入一个很大的值,比如9999999999999999999999(22个9),结果在大部分事件都是1位数,也就是1-9。如果我们减少一个9(21个9),那么几乎所有结果都是最后4位为0.
这应该是和 Random()函数本身的算法有关系。
为了让结果更好一些,通过实验,我应该把输入数字的Length限制在14以内。
结果如下
好了。这回基本上没有bug了。
但是我们其实对于 max TextField 限制输入14个字符有更好的方法。同时我们还希望一旦弹出错误消息后能够清空 max TextField 并设置焦点在它上面。看下面
我们在看一个随机抽取人名:
这个就是随机抽取 hard code 好的人名。
上面还是有个 bug。就是如果连续点击 Start 。然后再 点击 Stop。Stop 则不好使。下面 fix 了这个 bug。
很好。
比如输入10, 点击 Start 就会显示从1到10之间的随机整数。
<html> <head> <title>randomnumber.html</title> <script type="text/javascript"> //该脚本实现了从1到100之间随机数 function count() { if (document.getElementById("max").value.length > 0) { max = document.getElementById("max").value; //max, 全局变量 } else { max = 0; return false; } document.getElementById("num").innerHTML = 1 + parseInt(max * Math.random()); } function start() { if (document.getElementById("max").value == 0) //此处是判断如果输入0,则提示用户 //输入正整数,并不执行count() { alert("Positive integer is required."); return false; } else { timeId = setInterval("count();", 100);//timeId 是个全局变量(没有 var) 而不是 //局部变量。整体的含义是,每隔 xx 毫秒执行一次 count() } } function stop() { clearInterval(timeId); } </script> </head> <body> <form> <input type="text" style='font-size:34px' id="max"> <br><br> <input type="button" style='font-size:40px' value="Start" onclick="start()"> <input type="button" style='font-size:40px' value="Stop" onclick="stop();"> <input type="reset" style='font-size:40px' value="Reset"> </form> <br> <font color="blue" style='font-size:250px' id="num">0</font> </body> </html>
结果大家自己试试
但是上面 script 有的 bug 是,文本框 应该只接受正整数,而脚本没有对输入是否为字符串,负数,小数进行验证。
于是更改如下:
<html> <head> <title>randomnumber.html</title> <script type="text/javascript"> //该脚本实现了从 1 到 xx 正整数之间随机数 var errorString = "Please input a positive integer."; function count() { if (document.getElementById("max").value.length > 0) { max = document.getElementById("max").value; //max, 全局变量 } else { max = 0; return false; } document.getElementById("num").innerHTML = 1 + parseInt(max * Math.random()); } function start() { if(isNaN(document.getElementById("max").value))//如果输入的不是数字,则报错。 { alert(errorString); return false; } if (document.getElementById("max").value.toString().indexOf(".") >0)//如果输入小数 //也就是包含了 ".", 则报错。 { alert(errorString); return false; } if (document.getElementById("max").value < 1) //此处是判断如果输入0或负整数,则提示用户 //输入正整数,并不执行count() { alert(errorString); return false; } else { timeId = setInterval("count();", 100);//timeId 是个全局变量(没有 var) 而不是 //局部变量。整体的含义是,每隔 xx 毫秒执行一次 count() } } function stop() { clearInterval(timeId); } </script> </head> <body> <form> <input type="text" style='font-size:34px' id="max" onKeyPress="if(event.keyCode==13){start();};"> <!-- 上面 event.keyCode==13是指如果按Enter 键,则。。。 --> <br><br> <input type="button" style='font-size:40px' value="Start" onclick="start()"> <input type="button" style='font-size:40px' value="Stop" onclick="stop();"> <input type="reset" style='font-size:40px' value="Reset"> </form> <br> <font color="blue" style='font-size:250px' id="num">0</font> </body> </html>
这回基本完成了。但是仍然有一个问题。
就是如果我们输入一个很大的值,比如9999999999999999999999(22个9),结果在大部分事件都是1位数,也就是1-9。如果我们减少一个9(21个9),那么几乎所有结果都是最后4位为0.
这应该是和 Random()函数本身的算法有关系。
为了让结果更好一些,通过实验,我应该把输入数字的Length限制在14以内。
结果如下
<html> <head> <title>randomnumber.html</title> <script type="text/javascript"> //该脚本实现了从 1 到 xx 正整数之间随机数 var errorString1 = "Please input a positive integer."; var errorString2 = "Input is too big."; function count() { if (document.getElementById("max").value.length > 0) //如果文本框输入了值 { max = document.getElementById("max").value; //max, 全局变量 } else //如果文本框没输入值,设置 max为0 { max = 0; return false; } document.getElementById("num").innerHTML = 1 + parseInt(max * Math.random()); } function start() { if(isNaN(document.getElementById("max").value))//如果输入的不是数字,则报错。 { alert(errorString1); return false; } if (document.getElementById("max").value.toString().indexOf(".") >0)//如果输入小数 //也就是包含了 ".", 则报错。 { alert(errorString1); return false; } if (document.getElementById("max").value < 1) //此处是判断如果输入0或负整数,则提示用户 //输入正整数,并不执行count() { alert(errorString1); return false; } if (document.getElementById("max").value.length > 14)//允许输入的最大程度为14 { alert(errorString2); max = 0; return false; } else { timeId = setInterval("count();", 100);//timeId 是个全局变量(没有 var) 而不是 //局部变量。整体的含义是,每隔 xx 毫秒执行一次 count() } } function stop() { clearInterval(timeId); } </script> </head> <body> <form> <input type="text" style='font-size:34px' id="max" onKeyPress="if(event.keyCode==13){start();};"> <!-- 上面 event.keyCode==13是指如果按Enter 键,则。。。 --> <br><br> <input type="button" style='font-size:40px' value="Start" onclick="start()"> <input type="button" style='font-size:40px' value="Stop" onclick="stop();"> <input type="reset" style='font-size:40px' value="Reset"> </form> <br> <font color="blue" style='font-size:50px' id="num">0</font> </body> </html>
好了。这回基本上没有bug了。
但是我们其实对于 max TextField 限制输入14个字符有更好的方法。同时我们还希望一旦弹出错误消息后能够清空 max TextField 并设置焦点在它上面。看下面
<html> <head> <title>random number</title> <script type="text/javascript"> //该脚本实现了从 1 到 xx 正整数之间随机数 var errorString = "Please input a positive integer."; function count() { if (document.getElementById("max").value.length > 0) { max = document.getElementById("max").value; //max, 全局变量 } else { max = 0; return false; } document.getElementById("num").innerHTML = 1 + parseInt(max * Math.random()); } function start() { if(isNaN(document.getElementById("max").value))//如果输入的不是数字,则报错。 { alert(errorString); document.forms[0].elements[0].value = ""; //清空 "max" TextField document.forms[0].elements[0].focus();//把焦点设置到 max TextField //document.getElementById("max").value="";//清空 "max" TextField //document.getElementById("max").focus();//把焦点设置到 max TextField return false; } if (document.getElementById("max").value.toString().indexOf(".") >0)//如果输入小数 //也就是包含了 ".", 则报错。 { alert(errorString); document.forms[0].elements[0].value = ""; //清空 "max" TextField document.forms[0].elements[0].focus();//把焦点设置到 max TextField //document.getElementById("max").value="";//清空 "max" TextField //document.getElementById("max").focus();//把焦点设置到 max TextField return false; } if (document.getElementById("max").value < 1) //此处是判断如果输入0或负整数,则提示用户 //输入正整数,并不执行count() { alert(errorString); document.forms[0].elements[0].value = ""; //清空 "max" TextField document.forms[0].elements[0].focus();//把焦点设置到 max TextField //document.getElementById("max").value="";//清空 "max" TextField //document.getElementById("max").focus();//把焦点设置到 max TextField return false; } else { timeId = setInterval("count();", 100);//timeId 是个全局变量(没有 var) 而不是 //局部变量。整体的含义是,每隔 xx 毫秒执行一次 count() } } function stop() { clearInterval(timeId); } </script> </head> <body> <form> <input type="text" style='font-size:34px' maxlength="14" id="max" > <!-- 上面 event.keyCode==13是指如果按Enter 键,则。。。 --> <br><br> <input type="button" style='font-size:40px' value="Start" onclick="start()"> <input type="button" style='font-size:40px' value="Stop" onclick="stop();"> <input type="reset" style='font-size:40px' value="Reset"> </form> <br> <font color="blue" style='font-size:150px' id="num">0</font> </body> </html>
我们在看一个随机抽取人名:
<html> <head> <title>random number</title> <script type="text/javascript"> //随机抽取人名 var errorString = "Please input a positive integer."; var arr = ["Alan C", "Alan T", "Cheney Ma", "Simon Zhao", "Jeade Kong", "Shawn Shang", "Phil Lew", "Jan", "Misly"]; function count() { max = arr.length; //max, 全局变量 document.getElementById("num").innerHTML = arr[parseInt(max * Math.random())]; } function start() { timeId = setInterval("count();", 100); } function stop() { clearInterval(timeId); } </script> </head> <body> <form> <input type="button" style='font-size:40px' value="Start" onclick="start()"> <input type="button" style='font-size:40px' value="Stop" onclick="stop();"> </form> <br> <font color="blue" style='font-size:150px' id="num"></font> <br> </body> </html>
这个就是随机抽取 hard code 好的人名。
上面还是有个 bug。就是如果连续点击 Start 。然后再 点击 Stop。Stop 则不好使。下面 fix 了这个 bug。
<html> <head> <title>random number</title> <script type="text/javascript"> //随机抽取人名 var errorString = "Please input a positive integer."; var arr = ["Alan C", "Alan T", "Cheney Ma", "Simon Zhao", "Jeade Kong", "Shawn Shang", "Phil Lew", "Jan", "Misly"]; max = arr.length; //max, 全局变量 var flag = true; function count() { document.getElementById("num").innerHTML = arr[parseInt(max * Math.random())]; } function start() { if (flag == true) { timeId = setInterval("count();", 100); flag = false; } else {} } function stop() { clearInterval(timeId); flag = true; } </script> </head> <body> <form> <input type="button" style='font-size:40px' value="Start" onclick="start()"> <input type="button" style='font-size:40px' value="Stop" onclick="stop();"> </form> <br> <font color="blue" style='font-size:150px' id="num"></font> <br> </body> </html>
很好。
相关文章推荐
- 12.输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
- 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
- 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
- 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
- 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
- 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
- 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
- 剑指offer题目描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
- 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
- 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
- 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
- 随机生成一个1~100之间的整数,玩家可以通过函数InputBox命令输入数字来猜测那未知的随机数字
- 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
- 输入一个整数数组,调整数组顺序使奇数位于偶数前面 JavaScript实现
- 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
- 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
- javascript小实例,编写一个方法,实现从n-m个数中随机选出一个整数
- 问题:利用输入输出流重载实现一个整数数组的输入和输出。 要求:输入一个数组大小 及 所有元素的值,排序后输出该数组的所有元素。
- 基础算法测试——生成一个1-10之间的随机整数组合
- 1.9猜数游戏,随机生成一个整数(0-100),用户输入他所猜的数,程序回答大了或者小了,用户再输入他所猜的数,直至猜对了为止