我有这个代码生成6个不同的数字(1 - 6),并显示所有不同的卷的百分比。百分比不会累加并正确显示。
var values = [ Math.floor(Math.random()*6) + 1, Math.floor(Math.random() * 6) + 1, Math.floor(Math.random() * 6) + 1, Math.floor(Math.random() * 6) + 1, Math.floor(Math.random() * 6) + 1, Math.floor(Math.random() * 6) + 1 ];
var different = 0;
var same = 0;
if (values[0] != values[1] != values[2] != values[3] != values[4] != values[5]) {
different += 1 ; }
else {
same += 1;
}
console.log((different/(same+different))*100 + "% of rolls are completely different");

答案 0 :(得分:0)
var values = [ Math.floor(Math.random()*6)+1, Math.floor(Math.random()*6)+1, Math.floor(Math.random()*6)+1, Math.floor(Math.random()*6)+1, Math.floor(Math.random()*6)+1, Math.floor(Math.random()*6)+1 ];
console.log(values);
var nums = new Set(values);
var uniqueVals = nums.size;
console.log('% age of unique values: ' + uniqueVals*100/values.length);

使用集合查找有多少值相同。
答案 1 :(得分:0)
稍微重新编写代码以提供更好的结构。我还添加了数组的控制台日志,以便您可以看到推入其中的数字。基本前提是生成一个randome数字,如果它已经不存在于数组中,则会增加不同的计数。然后它只是将不同的计数除以数组的长度以获得改变的卷的百分比。
var values = [];
var different = 0;
var same = 0;
for(i=0; i<6; i++){
var num = Math.floor(Math.random()*6) + 1;
if(values.indexOf(num) == -1){different++};
values.push(num);
}
console.log(values);
console.log(different + '/' + values.length + " (" + (different/values.length)*100 + "%) of rolls are completely different");
&#13;
答案 2 :(得分:0)
我会将所有数组的值作为键放入对象中。由于对象不能具有相同名称的键,因此重复键将被丢弃。然后我们可以通过比较数组的长度和对象中的键号来找到数组中唯一值的百分比。
var values = [ Math.floor(Math.random()*6) + 1, Math.floor(Math.random() * 6) + 1, Math.floor(Math.random() * 6) + 1, Math.floor(Math.random() * 6) + 1, Math.floor(Math.random() * 6) + 1, Math.floor(Math.random() * 6) + 1 ];
console.log(values);
var obj = {};
values.forEach(function(val) {
obj[val] = true;
});
var difference = Math.round((Object.keys(obj).length/values.length) * 100)
console.log(difference + ' % of rolls are completely different')