2017-03-22 5 views
1

Ich habe diesen Code, der 6 verschiedene Zahlen (1 - 6) erzeugt, und zeigt den Prozentsatz der Rollen, die alle unterschiedlich sind. Die Prozentsätze addieren sich nicht und werden nicht korrekt angezeigt.Überprüfen Array-Werte sind alle unterschiedlich

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

können Sie einen Code ohne Intervall posten? –

+1

Ihre if-Anweisung ist falsch. Es bedeutet nicht, was du willst. – mehulmpt

+0

Sie haben ein nachkommendes Komma in Ihrem Werte-Array. Durch das Entfernen wird zwar die Funktion ausgeführt, aber es scheint keine gut konstruierte Funktion zu sein und sollte neu geschrieben werden. – gavgrif

Antwort

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

Verwenden Sie einen Satz, um herauszufinden, wie viele Werte gleich sind.

0

Eine leichte Überarbeitung des Codes, um eine bessere Struktur zu erhalten. Ich habe auch ein Konsolenprotokoll des Arrays hinzugefügt, damit Sie die darin enthaltenen Zahlen sehen können. Die Grundvoraussetzung ist, dass eine Zufallszahl generiert wird und wenn sie nicht bereits im Array vorhanden ist - die unterschiedliche Anzahl wird erhöht. Dann ist es nur ein Fall der Aufteilung der verschiedenen Anzahl durch die Länge des Arrays, um den Prozentsatz der geänderten Rollen zu erhalten.

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

würde ich alle Werte in das Objekt als Schlüssel des Arrays gesetzt. Da ein Objekt nicht die Schlüssel mit dem gleichen Namen haben kann, werden wiederholte Schlüssel weggeworfen. Dann können wir den Prozentsatz der eindeutigen Werte im Array finden, indem wir die Länge des Arrays mit der Anzahl der Schlüssel im Objekt vergleichen.

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

Dieser Ansatz ist auch nicht schlecht für die Leistung! –

Verwandte Themen