2014-03-28 2 views
6

Wie generiere ich eine 9-stellige Ganzzahl, die alle Ziffern von 1-9 hat? Wie 123456798, 981234765, 342165978, usw.Generieren zufällige Ganzzahl mit allen Ziffern von 1-9

dies zu tun:

var min = 100000000; 
var max = 999999999; 
var num = Math.floor(Math.random() * (max - min + 1)) + min; 

funktioniert mich nicht geben, die ganze Zahl, die ich die meiste Zeit wollen (müssen nicht alle Ziffern von 1 bis 9).


111111119 ist nicht akzeptabel, da jede Nummer mindestens eine "1", "2", "3", ... und eine "9" enthalten muss.

+0

gut für den Anfang des min 111111111 – Banana

+5

ändern, die nicht wirklich zufällig ist, oder? – CodingIntrigue

Antwort

11

Starten Sie einfach mit der Zeichenfolge 123456789 und mischt es zufällig, wie beschrieben in How do I shuffle the characters in a string in JavaScript?

String.prototype.shuffle = function() { 
    var a = this.split(""), 
     n = a.length; 

    for(var i = n - 1; i > 0; i--) { 
     var j = Math.floor(Math.random() * (i + 1)); 
     var tmp = a[i]; 
     a[i] = a[j]; 
     a[j] = tmp; 
    } 
    return a.join(""); 
} 
4

Dieses Programm, das mit wenig zwickt, wird eine gute Ergänzung zu Ihrem benutzerdefinierten Dienstprogramm Gürtel sein.

Angepasst von der _.shuffle Funktion der Underscore.js-Bibliothek, die die Liste der Daten mit Fisher-Yates Shuffle algorithm mischt.

function getRandomNumber() { 
    var rand, index = 0, shuffled = [1, 2, 3, 4, 5, 6, 7, 8, 9]; 

    shuffled.forEach(function(value) { 
     rand = Math.floor(Math.random() * ++index); 
     shuffled[index - 1] = shuffled[rand]; 
     shuffled[rand] = value; 
    }); 

    return shuffled.reduce(function(result, current) { 
     return result * 10 + current; 
    }, 0); 
} 

console.log(getRandomNumber()); 

Dieses Programm wird immer eine Zahl zurück, die in ihm alle 9 Zahlen hat und die Länge ist auch 9.

+0

Technisch denke ich nicht, dass dies Fisher-Yates ist, da dies nicht an Ort und Stelle mischt. – Peter

+0

@Peter Sie haben Recht, ich habe die Antwort jetzt aktualisiert, bitte überprüfen Sie :) – thefourtheye

1

Recurse!

var randomize = function (str) { 
    if (str.length == 9) return str; 
    var newDigit = Math.floor(Math.random()*9 + 1); 
    if (str.indexOf(newDigit) == -1) { 
     return randomize(str + newDigit); 
    } else { 
     return randomize(str); 
    } 
} 

Dort gibt es viel Platz für Optimierung. Oder verwenden Sie einfach eine einfache Schleife.

Working fiddle

Verwandte Themen