我的目标是随机对数组进行排序并在文本框中显示已排序的信息。很简单,我会想(但不幸的是,对于像我这样的人来说不是那么简单)。无论如何,这就是我所拥有的:
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。”当我追究这个错误时,我发现了进一步的“澄清”:
您正在尝试将对象强制转换为无法使用的类型 转换。如果您要转换的类不在,则会发生这种情况 正在投射的对象的继承链。
但是,我不太清楚该怎么做。
感谢您的时间。
答案 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);