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 - 如果已经填充了下一个数组点,则填充下一个数组点的主要内容,如果未能解决你的问题,请参考以下文章

如果复选框选中禁用其他,如果未选中启用所有 JavaScript?

检查记录是不是存在,如果是,则“更新”,如果不“插入”

Jquery“如果这个和如果那个”然后这样做

如果上游启动,Nginx 绕过缓存,如果关闭则使用缓存

如果新文件不存在则写入新文件,如果存在则追加到文件

数据库:如果存在则“更新”如果不存在则插入 [重复]