Как выбрать случайный элемент в массиве, избегая (за исключением, если это) определенное значение? - PullRequest
2 голосов
/ 27 января 2011

Например, когда пользователи подключаются к этому приложению, им присваивается идентификатор пользователя var, затем он вставляется в массив.Итак, я использую

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

, чтобы выбрать другого случайного пользователя.Но мне нужно убедиться, что он не выбирает идентификатор пользователя, которому они были назначены лично, чтобы они не получили себя.

как бы я использовал этот код, но скажите "помните, убедитесь, что вы не'tick userid "

возможно, я мог бы сделать что-то вроде

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), если он получит его дважды ...

Но,Я думаю, я мог бы пропустить все это, если есть эффективный способ, чтобы убедиться, что он не выберет его в первую очередь.

Извините, я не совсем уверен, как я должен был сформулироватьвопрос или, если есть термин, который я не знаю, чтобы сослаться на то, что я пытаюсь сделать.

Ответы [ 3 ]

2 голосов
/ 27 января 2011

Вы на правильном пути, просто вызовите ваш метод, например,

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

  if (chosenUser == userid)
  {
    return GetUser();
  } 
return chosenUser;
}
1 голос
/ 27 января 2011

с использованием Math.round () может привести к возвращению «неопределенного», поскольку вы разрешаете ему выбирать usersOnlineArray.length, который не индексируется.используйте взамен Math.floor () .

вы можете переместить элемент, который вы не хотите сопоставлять, в конец массива, а затем произвольно выбрать элемент из массива, кромепоследний элемент:

//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 голосов
/ 11 сентября 2015

Поскольку Flash - это та же ветвь языков ECMA, что и 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];
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...