【问题标题】:Loop around an array循环数组
【发布时间】:2017-02-23 23:59:38
【问题描述】:

假设我有一个数组:

arr[3]={0,1,2};

我正在生成一个随机值:

int r = Random.Range(0,4);

然后在我的代码中我想使用:

print(arr[r-1]+arr[r]+arr[r+1]);

在这种情况下,它仅在 arr[r] 为 1 时才有效,因为如果 r=0 则 r-1 将为 -1 ,如果我增加最后一个索引,我该怎么办,它会回到某个观点? 所以如果 r=2, 所以 arr[r]=2, arr[r+1]=0 和 arr[r+4] 也是 0 因为它做了一个额外的循环。

我知道我可以使用 ifs,如果 r=0 则 r-1=3,但这并不理想。 谢谢

【问题讨论】:

  • 你可以使用模%
  • 有效的、可运行的 C# 代码会很有用。
  • 另外,无论r 选择什么代码arr[r-1]+arr[r]+arr[r+1] 总是会添加到3(一旦你弄清楚如何循环数组)。 真正的代码会很有用

标签: c# arrays algorithm increment


【解决方案1】:

以下是我认为您可以使用的东西:

var random = new Random();

var arr = new [] { 0, 1, 2 };

for (var i = 0; i < 20; i++)
{
    int r = random.Next(1, 1 + arr.Length);
    Console.WriteLine(String.Join(", ", (r - 1) % 3, r % 3, (r + 1) % 3));
}

产生:

1, 2, 0 2, 0, 1 2, 0, 1 1, 2, 0 2, 0, 1 2, 0, 1 1, 2, 0 1, 2, 0 2, 0, 1 1, 2, 0 1, 2, 0 1, 2, 0 2, 0, 1 1, 2, 0 1, 2, 0 1, 2, 0 0, 1, 2 1, 2, 0 1, 2, 0 0, 1, 2

【讨论】:

    【解决方案2】:

    你可以试试模数%。我不太确定该操作是否会始终返回正值,但您始终可以使用r = random.range(3,7);,然后使用r-1 % 3 等。

    【讨论】:

      猜你喜欢
      • 2018-01-21
      • 2019-02-13
      • 2020-10-28
      • 1970-01-01
      • 2011-12-24
      • 1970-01-01
      • 2019-02-12
      • 2021-02-13
      • 2013-12-17
      相关资源
      最近更新 更多