迭代月份中使用的循环数组公式

问题描述 投票:0回答:4

目前我发现使用

( starting index + size of array + 1 ) % size of array
将使我能够将循环数组从 0 索引到 N (数组大小 - 1 )。

目前我正在使用它从特定月份(即 6 = 七月)开始循环

months
。但问题是这种方法还会打印 0,这不是正确月份 ( 1 - 12 ) 的一部分。我知道我可以用 if else 语句来做到这一点,但如果可能的话,我只想修改
( starting index + size of array + 1 ) % size of array
公式以适应我的需求(如果可能的话)。

c++ circular-reference
4个回答
1
投票

如果如您所说

6 = July
那么
0 = January
和 0 实际上很可能是一个完全有效的值。

如果你的意思是说

7 = July
那么我实际上建议简单地将数组索引设置为0-11而不是1-12。当在与用户的接口和内部接口之间进行更改时,您将在基于零和基于一的索引之间进行转换。


1
投票

怎么样:

starting index % size of array + 1

0
投票

如果你有一个增量变量

i
并且你做了类似的事情
i % N
,你将得到从0到N-1的循环值:0,1,2,...,(N-1),0, 1,2,...,(N-1)

因此,如果你想从 1 开始,你必须在结果上加 1:

(i % N) + 1

0
投票

这是您想要的公式 N 是索引为 1..N 的元素数量(12 个月) n 是“当前”元素 这会生成 2 个相邻邻居的索引(从 1 开始索引),环绕两端:

( ( n-1 + N ± 1 ) % N ) + 1

(n-1) 中的 -1 和 RHS 上最后的 +1 是索引调整器

© www.soinside.com 2019 - 2024. All rights reserved.