在随机排序的数组中显示文本:Adobe ActionScript 3

时间:2014-07-25 22:26:07

标签: arrays actionscript-3 sorting

我的目标是随机对数组进行排序并在文本框中显示已排序的信息。很简单,我会想(但不幸的是,对于像我这样的人来说不是那么简单)。无论如何,这就是我所拥有的:

var words:Array = ["word 1", "word 2", "word 3", "word 4", "word 5"];

function randomize ( a : *, b : * ) : int {
    return ( Math.random() > .5 ) ? 1 : -1;
}

trace( words.sort( randomize ) );

txtWordDisplay.text = words

当我运行此代码时,我收到错误消息:“将Array类型的值隐式强制转换为不相关的类型String。”当我追究这个错误时,我发现了进一步的“澄清”:

  

您正在尝试将对象强制转换为无法使用的类型   转换。如果您要转换的类不在,则会发生这种情况   正在投射的对象的继承链。

但是,我不太清楚该怎么做。

感谢您的时间。

2 个答案:

答案 0 :(得分:0)

您的TextField text属性无法将字符串数组隐式转换为单个字符串,而这正是它所期望的。

它适用于您的跟踪,因为trace接受一组参数:

public function trace(... arguments):void

如果你想要类似的行为,就像在逗号分隔的字符串中一样,你可以在数组上调用toString()

txtWordDisplay.text = words.toString();

否则,遍历数组并构建一个字符串:

words = words.sort(randomize);
var sentence:String = "";

for (var i:uint = 0; i < words.length; i++)
{
    // Capitalize first word.
    if (i == 0) {
        sentence += words[i].substr(0,1).toUpperCase();
        sentence += words[i].substr(1, words[i].length);
    } else {
        sentence += words[i];
    }

    // Add space between words or punctuation.
    if (i < words.length - 1)
        sentence += " ";
    else
        sentence += ".";
}

txtWordDisplay.text = sentence;

这将输出:

  

单词5单词3单词1单词4单词2。

答案 1 :(得分:0)

这适用(不投标):

var words:Array = ["word 1", "word 2", "word 3", "word 4", "word 5"];
txtWordDisplay.text = words.sort(function():int {return(Math.random() > .5 ? -1 : 1)});

或通过更改您调用函数的方式:

txtWordDisplay.text = words.sort(randomize);