Neden bu bazen 2 döndürür?
function pickServer(){
$varr = rand(1,4);
if($varr==2){
pickServer();
}
return $varr;
}
Sorunuzun cevabı, diğerleri işaret gibi, kod dönmeden yoluyla düşüyor olmasıdır. 2
ilk denemede and ikinci girişimi (bu olay bir 1/16 şans var) hem rand için çağrı () tarafından döndürülen ise, [{alırsınız (0)]}, bir sonuç olarak.
Ama sorunu çözmek için bir yaklaşım daha iyi olabilir.
Özyineleme ve döngü hem de bu sorun için mayalı vardır. Bu, mapping problem, bir randomness sorundur. (O bir red döngü içinde en kolay ele alınabilir bazı yaygın rastlantısallığı kodlama mülakat sorunları benzer, ama gerçekten bu sınıfın bir sorun değildir.)
Sen three sonuçlardan birini değil, four istiyorum. (1, 3, ve 4..) Bu üç rasgele sayılar değil, dört bir dizi üreten gerektiği anlamına gelir. Bir dizi ile eşleştirmek veya bir if
kullanabilirsiniz. Her iki olasılık aşağıda gösterilmiştir. Ben sözdizimi yanlış varsa bana haber ver - benim PHPfu bu sabah zayıf.
/* array remapping */
function pickServer() {
$remap = array(1, 3, 4);
return $remap[rand(1,3)];
}
/* if remapping */
function pickServer() {
$server = rand(1,3);
if ($server==2) {
$server=4;
}
return $server;
}
Ben daha önce bunu fark etmedi, ama balpha benim cevap beklenen. Onun ikinci örnekte bir if
ile eşleştirilir. Bunun yerine 2-4 remapping, o sadece bir eşdeğer bir çözelti olan 1'in üzerinde herhangi bir cevaba yenisini daha ekledi.
Ne muhtemelen istiyorum
function pickServer(){
$varr = rand(1,4);
if($varr==2){
$varr = pickServer();
}
return $varr;
}
- Ama bu çok uzun özyinelemenin gitmez hiçbir garantisi olmadığını unutmayın. Belki de, böyle bir şey yapmanız gerekir:
function pickServer(){
$varr = rand(1,3);
if($varr > 1){
$varr = $varr + 1;
}
return $varr;
}