【问题标题】:Actionscript/Animate - Fill in next array spot if this one is already filledActionscript/Animate - 如果已经填充了下一个数组点,则填充下一个数组点
【发布时间】: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) } 就是这样...!! (任何不是 == 到 "" 的内容都将被自动跳过)。

标签: arrays actionscript-3


【解决方案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 的事情吗?不想在 stackoverflow 上为这么简单的事情浪费一个问题点,但在任何地方都找不到解决方案。链接到我打开的聊天室: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();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-16
    • 1970-01-01
    • 2022-11-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多