首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >For循环不接受数组。如何处理这个Amibroker代码?

For循环不接受数组。如何处理这个Amibroker代码?
EN

Stack Overflow用户
提问于 2019-08-29 17:29:13
回答 5查看 1.3K关注 0票数 1

下面的代码将计算事件发生时某些条形图中的高-低范围,并计算高-低范围的平均值。

代码语言:javascript
复制
event_up = get_event_up();
event_down = get_event_low();   
num_events_in_range = get_num_events_in_range();

sum_pct_updown_dist = 0;
for (i=1;i<num_events_in_range; i++) //for cannot accept array type 
{
    event_up_high_i = ValueWhen(event_up, High, i);
    event_down_low_i = ValueWhen(event_down, Low, i);
    pct_updown_dist_i = (event_up_high_i-event_down_low_i)/event_up_high_i*100;
    sum_pct_updown_dist = sum_pct_updown_dist + pct_updown_dist_i;
}
avg_pct_updown_dist = sum_pct_updown_dist/num_events_in_range;

由于(i=1;i<num_events_in_range; i++)的这一行代码违反了Amibroker语法,所以代码在Amibroker中无法工作。For循环不接受数组类型。num_events_in_range是一个数组。

如何修改此代码以解决此问题?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2020-02-20 15:39:35

for循环的语法是

代码语言:javascript
复制
for ( init-expression ; cond-expression ; loop-expression )

在您的代码中,i < num_events_in_range是一个无效的条件,因为i是一个整数,num_events_in_range是一个数组。

代替num_events_in_range,使用num_events_in_range的长度

票数 4
EN

Stack Overflow用户

发布于 2020-02-21 21:03:45

尝尝这个

代码语言:javascript
复制
event_up = get_event_up();
event_down = get_event_low();   
num_events_in_range = get_num_events_in_range();

sum_pct_updown_dist = 0;
for (var i=1;i<num_events_in_range.length; i++) //for cannot accept array type 
{
    event_up_high_i = ValueWhen(event_up, High, i);
    event_down_low_i = ValueWhen(event_down, Low, i);
    pct_updown_dist_i = (event_up_high_i-event_down_low_i)/event_up_high_i*100;
    sum_pct_updown_dist = sum_pct_updown_dist + pct_updown_dist_i;
}
avg_pct_updown_dist = sum_pct_updown_dist/num_events_in_range;

您需要更新计算平均值的最后一行。

代码语言:javascript
复制
avg_pct_updown_dist = sum_pct_updown_dist/num_events_in_range;

在这里,num_events_in_range会产生错误。根据for循环的语法,您需要一个表达式,它可以是真的,也可以是假的。正如@Shylajhaa所解释的那样,不能在单个整数值和数组之间进行比较。

票数 2
EN

Stack Overflow用户

发布于 2020-02-22 04:44:36

这很简单,因为它归结为for循环的基本结构。以下是您的错误:

由于这一行(i=1;i< num_events_in_range;i++)违反了Amibroker语法,所以代码在Amibroker中无法工作。For循环不接受数组类型。num_events_in_range是一个数组。

正如您的错误所暗示的,这就是问题所在:

for (i=1;i<num_events_in_range; i++)

代码语言:javascript
复制
   where, ^^^^^^^^^^^^^^^^^^^ this is the problem

在for循环的结构中:

首先,将索引(i)声明为:

let i = [your starting point, usually 0 because is the first item in the array, in this case 1)

然后,当您希望索引停止时,必须告诉for循环。为此,您可以将索引与数字类型值进行比较。当我等于或大于这个数字时,它将按指示停止。

引起错误的原因是:数组不是数字类型。

因此,不能将索引与数组进行比较。

您必须将索引与数字进行比较,如果您希望在给定数组持续的时间内运行for循环,那么在这里使用.length

考虑这个问题的最好方法是,for循环将迭代给定数组上的每个项。

为此,我们使用数组的.length属性。它返回数组中有多少项的数目值。

在这种情况下:

num_events_in_range.length给出了一个数字,即num_events_in_range数组中的项数。

最后但并非最不重要的是,您必须告诉for循环其迭代的因素。虽然i++ (索引每次自己添加一个索引来运行每个项目,无一例外)是此特性最常用的用法,但您可以将其更改为i+2或i+3,索引将在2s和3s中计算。

例如: By 2s,(假设起点为0):0,2,4,6,8,10,12,14,16,18.直到索引达到相同或高于其比较数的点为止。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57715230

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档