我理解为什么我一直得到1作为最小球数;我是否创建了另一个包含6个随机数的变量/数组(如果是,如何 - 我不完全理解如何执行此操作)。
答案 0 :(得分:2)
首先,定义一个包含随机数的数组:
var random_balls = [];
每次生成随机数时,请将其添加到该数组中:
// generate, the + is to convert a string like '12' to the number 12, otherwise
// comparing them gives wrong results: '12' < '9' but 12 > 9
var random_ball = +balls[Math.floor(Math.random()*balls.length)];
// if indexOf returns -1, the ball is not present in the array
// (otherwise it returns the index at which the ball is)
while(random_balls.indexOf(random_ball) !== -1) {
// generate again if you already took this ball
random_ball = +balls[Math.floor(Math.random()*balls.length)];
}
// add to array
random_balls.push(random_ball);
// display
document.write(random_ball);
min checker将使用如下随机数迭代新数组:
for (i=0; i<random_balls.length; i++)
{ if (random_balls[i] < min)
min = random_balls[i];
}
如果你不知道,你也可以使用:
var min = Math.min.apply(null, random_balls); // use built in min function, passing array as arguments
答案 1 :(得分:1)
定义全局最小变量并在选择随机球后更改它:
var min = Number.POSITIVE_INFINITY;
...
for(i=0; i<NUMBER_OF_BALLS; i++) {
var ball = balls[Math.floor(Math.random()*balls.length)];
min = Math.min(ball, min);
document.write(ball);
document.write(" ");
}
小提琴:http://jsfiddle.net/Daess/JPxXp/4/
循环min
变量将保持最小数字。
答案 2 :(得分:1)
实际上,您需要将随机选择的值推送到数组中,并找到该数组的最小WRT。
document.write("your balls are ");
NUMBER_OF_BALLS = 6
var i = 0;
var balls = ['1','2','4','5','6','7','8','9','10','11','12','13','14','15','16','17','18','19','20','21','22','23','24','25','26','27','28','29','30','31','31','32','33','34','35','36','37','39','40'];
var chosen = [];
for(i=0; i<NUMBER_OF_BALLS; i++) {
chosen.push(balls[Math.floor(Math.random()*balls.length)]);
document.write(chosen[chosen.length-1]);
document.write(" ");
}
document.write("<br>");
document.write("<br>");
min = Number.POSITIVE_INFINITY;
for (i=0; i<chosen.length; i++) {
if (chosen[i] < min)
min = chosen[i];
}
document.write("The lowest ball was: " + min);
document.write("<br>");
答案 3 :(得分:0)
您从balls
数组中取得最小值。您所做的只是从阵列中打印出六个随机元素。你需要创建一个包含6个元素的新数组,将原始数组中的6个随机元素复制到其中,然后得到最小值。还要注意你可以两次获得相同的元素。
答案 4 :(得分:0)
我将采取不同的方式:
var arr = [], // acceptable values
randomArray = []; // random array
// Create an array of numbers 0 to 45;
for(var i=1; i <=45 ; i++){
arr.push(i);
}
// From http://stackoverflow.com/q/962802#962890
function shuffle(array) {
var tmp, current, top = array.length;
if(top) while(--top) {
current = Math.floor(Math.random() * (top + 1));
tmp = array[current];
array[current] = array[top];
array[top] = tmp;
}
return array;
}
// Randomly sort the array and take 6
randomArray = shuffle(arr).slice(0,6);
document.write("Random array: " + randomArray + "<br>");
document.write("Minimum value: " + Math.min.apply(Math, randomArray));
示例:http://jsfiddle.net/jonathon/85vEA/
一开始,我从1-45生成我的数字集(而不是你拥有的字符串数组)。然后我使用Fisher-Yates shuffle随机排序(参见另一个问题的链接),为了获得我的6个随机数的子集,我在数组上做了一个切片。
然后可以通过Math.min.apply(Math, randomArray)