2011-01-26 91 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]; 
}; 
相关问题