Как отобразить мой массив в тексте без повторения, используя AS3?

#actionscript-3

#actionscript-3

Вопрос:

 var arr:Array = new Array("A","B","C")
        //random number
        var rand:Number = Math.floor(Math.random()*arr.length)
        //my text 
        t1.text = arr[rand]
        t2.text = arr[rand]
        t3.text = arr[rand]
 

Комментарии:

1. Если кто-то отклонил вопрос, пожалуйста, скажите, почему вопрос неясен или нужен отклик. Я поддержал этот вопрос, потому что считаю, что новичку не нужен понижающий голос, поскольку вопрос, на мой взгляд, ясен.

2. Этот человек не новичок. Они уже несколько месяцев задают ужасные вопросы. Единственная причина, по которой у них есть только 1 балл, заключается в том, что они отказываются прилагать какие-либо усилия для написания хороших вопросов. @tatactic

3. @tatactic Я отклонил этот вопрос, потому что это просто плохо отформатированный дамп кода без объяснения того, чего они пытаются достичь, как они придумали этот код, какие-либо сообщения об ошибках или фактический вывод и т.д. Ломаный английский в названии тоже не помогает.

4. Да, этот вопрос неясен по 2 причинам. Я, наконец, тоже проголосовал против. Моим первым впечатлением было то, что @ActionScript student хотел иметь одну строку, которая не могла содержать в себе две одинаковые буквы. Итак, «ABC», «BAC», «CAB» И НИКОГДА что-то вроде «AAC», BCC»… Похоже, он хочет получить много результатов, которые никогда не могут быть одинаковыми. Итак, я согласен, это неясно. Спасибо за ваши комментарии!

Ответ №1:

Что-то вроде

 private function getRandomText():String
{
    var rand:Number = Math.floor(Math.random() * arr.length);

    // this will both get you the random string from the array 
    // and remove it from the array making sure you won't get the same text next time
    var randomString:String = arr.splice(rand, 1);

    return randomString;
}

t1.text = getRandomText();
t2.text = getRandomText();
t3.text = getRandomText();
 

Естественно, это изменит массив, удалив отображаемую строку. Итак, если вам нужно сохранить массив для будущего использования, вам нужно будет сделать его копию и использовать копию

Комментарии:

1. О, извините, используйте splice(), а не RemoveAt() — забыл, что это массив 🙂 Отредактировал мой ответ

2. Доступ к неопределенному свойству i

3. Lol извините, arr.splice(rand, 1);

Ответ №2:

На мой взгляд, вы можете использовать такую функцию. Это было сделано быстро, но я думаю, что избегайте проверять каждый раз в цикле do while (бесполезно и медленнее). Таким образом, вы можете легко изменить код по мере необходимости…

 var choices:Vector.<String> = new <String>["A","B","C","D","E","F"];
var randomChoices:Vector.<String> = new Vector.<String>();
var choicesBackup:Vector.<String>;

function populateLetters():void{
    var n: uint = Math.floor(Math.random()*choices.length);
    randomChoices.push(choices[n]);
    choices.splice(n,1);
}

function getDifferentLetters():Vector.<String>{
    choicesBackup = choices.slice();
    randomChoices = new Vector.<String>();
    for(var i:uint=choices.length; i>0; i--){
        populateLetters();
    }
    choices = choicesBackup.slice();
    return randomChoices;
}


trace ("letters = "   choices   ", flush = "   getDifferentLetters());

// output : letters = A,B,C,D,E,F, flush = D,E,B,C,F,A
 

Комментарии:

1. как отобразить мой массив в тексте T1.text = populateLetters() не работает

Ответ №3:

Если я что-то пропустил, просто дайте мне знать!

 T1.text = getDifferentLetters();
 

и т.д…
Пример :

 var t1:TextField = new TextField();
addChild(t1);
t1.text = getDifferentLetters().toString();
t1.x = 100;
t1.y = 100;

var t2:TextField = new TextField();
addChild(t2);
t2.text = getDifferentLetters().toString();
t2.x = 100;
t2.y = 150;

var t3:TextField = new TextField();
addChild(t3);
t3.text = getDifferentLetters().toString();
t3.x = 100;
t3.y = 200;
 

Это должно сработать, если у вас есть ссылка на вашу переменную T1.
В вашем коде попробуйте использовать «Нижний регистр» для ваших переменных и методов.
«Верхний регистр» для первой буквы классов и все в «верхнем регистре», если вы используете константу.

Если вы используете только строки в массиве, используйте Vector .<Строка> вместо массива!

трассировка была просто примером для получения результата на выходе. С наилучшими пожеланиями. Николас.

Комментарии:

1. Пожалуйста, @ActionScript student проголосуйте за или против или отметьте ответ как «Решаемый», если ответ правильный! Если вам нужна дополнительная информация или вы столкнулись с другой проблемой, отредактируйте свой вопрос!

2. не создать новый . это та же проблема. У меня на сцене 3 текстовых поля, ВСЕ буквы отображаются в 3 текстовых текстах одновременно

3. Я хочу, чтобы отображаемая строка из массива не отображалась снова

4. как сказал вам @Philarmon, вы должны сохранить массив для будущего использования, вам нужно будет сделать его копию и использовать копию… И переопределить результат случайных выборов

5. та же проблема: мой текст1 показывает ABCDEF, мои тексты показывают ABCDEF, мой текст3 показывает ABCDEF … я хочу, чтобы каждый текст показывал одну букву без повторения