2011-01-26 69 views
1

例如,當用戶連接到這個應用程序時,它們被賦予一個userid var,然後它被插入到數組中。所以,我使用如何挑選數組中的隨機元素避免(除非是)某個值?

chosenUser = usersOnlineArray[Math.round((Math.random()*usersOnlineArray.length))];

挑另一個隨機用戶。但我需要確保它不會選擇他們親自分配的用戶ID,所以他們最終不會得到自己。

我將如何使用這些代碼,但告訴它「記住,要確保你不接的用戶ID」

也許我可以做這樣的事情

chosenUser = usersOnlineArray[Math.round((Math.random()*usersOnlineArray.length))]; 

    if (chosenUser = userid) 
    { 
     chosenUser = usersOnlineArray[Math.round((Math.random()*usersOnlineArray.length))]; 
    } else 
    { 
    //next part of mycode 
    } 

也許這應該是一個while (chosenUser = userid)櫃面它得到它兩次...

但是,我想我可以跳過所有,如果有一個高效的方式,以確保它沒有選擇它在第一個地方。

對不起,我不太清楚我應該怎麼表達這個問題,或者如果有一個術語我不知道指的是我想要做的。

回答

1

你在好辦法,只是再次撥打您例如

public void Something(){ string user = GetUser(); } 
public string GetUser(){ 
    chosenUser = usersOnlineArray[Math.round((Math.random()*usersOnlineArray.length))]; 

    if (chosenUser == userid) 
    { 
    return GetUser(); 
    } 
return chosenUser; 
} 
+0

沒錯,這就是我會做的方式。您確實需要確保至少有1個其他用戶在線,否則您將擁有無限遞歸。 – StapleGun 2011-01-27 00:44:46

+0

得使用比較==沒有賦值= – TheDarkIn1978 2011-01-27 03:19:48

0

使用Math.round()可能導致返回「未定義」,因爲你允許它選擇usersOnlineArray.length方法,這是沒有索引。改爲使用Math.floor()

你可以打動你不想匹配到數組的結尾,然後在任意一個元素從數組中選擇除了最後一個元素的項目:由於Flash是相同的ECMA

//Users Array 
var usersArray:Array = new Array("JoeID", "MaryID", "UserID", "JohnID", "SusanID"); 

//Find UserID And Push It To The End 
usersArray.push(usersArray.splice(usersArray.indexOf("UserID"), 1)); 

//Randomly Select Companion From usersArray Except For UserID (Last Element) 
var companion:String = usersArray[Math.floor(Math.random() * (usersArray.length - 1))]; 

trace(companion); 
0

這裏的語言,如JavaScript分支並沒有一個JS答案(和ActionScript是一種已滅絕的物種)是JS的答案(不遞歸):

var getRandomExcept = function(elements, exceptElement){ 
    if(elements.length <= 0){ 
     return null; 
    }else if(typeof exceptElement !== 'undefined' && elements.length == 1){ 
     if(elements[0] === exceptElement) return null; 
    } 

    var n = Math.floor(Math.random() * elements.length); 

    if(elements[n] === exceptElement){ 
     // make one random trip around elements but stop (<elements.length) before the exceptElement 
     n = (n + Math.floor(Math.random() * elements.length)) % elements.length; 
    } 
    return elements[n]; 
}; 
相關問題