Actionscript/Animate - 如果已经填充了下一个数组点,则填充下一个数组点
Posted
技术标签:
【中文标题】Actionscript/Animate - 如果已经填充了下一个数组点,则填充下一个数组点【英文标题】:Actionscript/Animate - Fill in next array spot if this one is already filled 【发布时间】:2017-04-07 11:04:48 【问题描述】:所以我正在开发一个图形计算器(比基本的窗口计算器更具挑战性),我希望能够在一个文本字段中完成整个“数学”,就像输入“5+3-”一样5*11/3",当你按下'='时它会给你解决方案
我决定用数字和符号数组来制作它,但如果已经使用了这个数组,我不知道如何让它填充下一个数组:
var numbers:Array = new Array("","","","","","","","","","","","","","","","");
var actions:Array = new Array("","","","","","","","","","","","","","","","");
我正在使用 split 将我输入的数字与符号分开,并且我希望将数字放置在数组中。示例:我输入 555+666 然后我需要类似
if (numbers[0] = "") numbers[0] = 555
else if (numbers[1] = "") numbers[1] = 555
else if.....
知道我的意思吗? 好难形容…… 比如...当我输入一个数字时,如果 numbers[0] 已经填写,请填写 numbers[1],如果 numbers[1] 已填写,请转到 numbers[2] 等
【问题讨论】:
这肯定解决了吗?使用for
循环,其中var i : int = 0
和如果i < numbers.length
则应增加i++
... 现在在For 循环内您可以执行if (numbers[i] == "") numbers[i] = int(555)
就是这样...!! (任何不是 == 到 ""
的内容都将被自动跳过)。
【参考方案1】:
即使我同意@Nbooo 和反向波兰表示法 但是向量可能有固定的长度。
这不是一个答案,而只是一个示例(如果必须定义您的数组的长度):
//Just for information..
var numbs:Vector.<Number> = new Vector.<Number>(10,true);
var count:uint = 1;
for (var i in numbs)
numbs[i] = count++
trace(numbs);
// If You try to add an element to a Vector,
// You will get the following Error at compile time :
/*
RangeError: Error #1126: Cannot change the length of a fixed Vector.
at Vector$double/http://adobe.com/AS3/2006/builtin::push()
at Untitled_fla::MainTimeline/frame1()
*/
numbs.push(11);
// Will throw an Error #1126
trace(numbs);
如果您使用此代码更新固定向量,这将不会抛出错误:
numbs[4]=11;
trace(numbs);
输出:
1,2,3,4,5,6,7,8,9,10
1,2,3,4,11,6,7,8,9,10
// length is 10, so no issue...
如果您考虑数组和向量之间的性能,请查看此参考:Vector class versus Array class
我希望这可能会有所帮助。
[编辑]
我建议你也检查一下这些链接:
ActionScript 3 fundamentals: Arrays
ActionScript 3 fundamentals: Associative arrays, maps, and dictionaries
ActionScript 3 fundamentals: Vectors and ByteArrays
[/编辑]
最好的问候。 尼古拉斯。
【讨论】:
我能在 priv chat 上问你一些关于 actionscript 的事情吗?不想在 *** 上为这么简单的事情浪费一个问题点,但在任何地方都找不到解决方案。链接到我打开的聊天室:e-chat.co/room/174323 当然,向量是可以固定的,我只是假设在这种情况下,对于这个问题,非固定向量会更合适。当然,这只是一种意见。 @Nbooo :这就是我说的原因:“这不是答案,只是一个例子”;)【参考方案2】:您要实现的是Reverse Polish Notation。在 actionscript3 中,数组是动态的,而不是固定大小的,这意味着您可以将元素添加到数组中而不用担心容量(至少在您的情况下)。
const array:Array = new Array();
trace(array.length); // prints 0
array.push(1);
array.push(2);
trace(array.length); // prints 2
我建议使用 Array/Vector 的“push”和“pop”方法,因为这样的任务更自然。使用这些方法将简化您的实现,因为您将摆脱不必要的检查,例如
if (numbers[1] == "") ...
并将其替换为:
numbers.push(value);
然后从顶部取一个值:
const value:String = numbers.pop();
【讨论】:
以上是关于Actionscript/Animate - 如果已经填充了下一个数组点,则填充下一个数组点的主要内容,如果未能解决你的问题,请参考以下文章