2017-03-22 5 views
1

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

間隔を置かずにコードを投稿できますか? –

+1

if文が間違っています。それはあなたが望むものを意味するものではありません。 – mehulmpt

+0

値配列に末尾のカンマがあります。それを削除すると、関数は実行されますが、関数はうまく構築されていないようで、書き直す必要があります。 – gavgrif

答えて

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);

同じですどのように多くの値を見つけるためにセットを使用します。

0

より良い構造を与えるためのコードのやり直し。また、配列のコンソールログを追加して、その中にプッシュされている数値を見ることができます。基本的な前提は、ランダム・ナンバーが生成され、それが既にアレイに存在しない場合、異なるカウントが増分されることです。次に、異なるカウントを配列の長さで割って、変更されたロールのパーセンテージを取得するケースです。

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");

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') 
+0

このアプローチもパフォーマンスに悪影響を与えません! –

関連する問題