【问题标题】:Comparing elements in a circular array(java)比较循环数组中的元素(java)
【发布时间】:2021-12-10 18:33:44
【问题描述】:

我正在尝试制定一个 for 循环,该循环将采用一个数组,例如 5 个元素,并允许我将 a[0] 视为在 a[4] 之后,将 a[4] 视为之前a[0].

我无法更改数组,它在每个元素中存储一个线程,所以我宁愿让它尽可能简单,以免破坏线程的内容(线程被同步并使用可重入锁 - 所以问题只是关于数组)。

我想让这个简单的 for 循环:

for (int i = 0; i < ARRAYSIZE; i++)

允许我将其视为循环数组。我想过使用 mudolo 操作来实现这一点,但这也不起作用。这是我尝试过的:

for (int i = i+1 % n; i < ARRAYSIZE; i++)

但这也不起作用。我要做的基本上是检查array[i] 是否大于array[i+1]array[i-1]

非常感谢您的帮助。

【问题讨论】:

  • a[i%5] --------
  • 周期性到底是什么意思?当i &lt; ARRAYSIZEfalse 时,您希望循环终止吗?
  • 这里是否允许其他数据结构? (你告诉我。)无论如何,我想知道循环链表是否比数组更合适。
  • 感谢您的评论,但问题是关于数组的。下次链表:)

标签: java arrays for-loop circular-reference


【解决方案1】:

对循环变量i使用取模运算符,乘以数组的大小:

public static void main(String [] args) {

    int [] arr = {1, 5, 4, 3, 3, 4, 3, 1};
    int ARRAYSIZE = arr.length;

    for (int i = 0; i < ARRAYSIZE; i++) {
        int index = i % ARRAYSIZE;
        int indexUpper = (i + 1) % ARRAYSIZE;
        //access array using index
        if (arr[index] == arr[indexUpper]) {
            System.out.format("Elements %d and %d are equals.\n", index, indexUpper);
        }
    }
}

请注意,对于要循环的上限值,您需要执行(i + 1) % ARRAYSIZE 以确保获得下一个元素。要获得元素 两个 的位置,请改为添加 2 或您选择的任何修饰符。

这个测试显示元素 7 和 0 是如何相等的,因为它是循环的。

输出:

元素 3 和 4 相等。

元素 7 和 0 相等。

【讨论】:

  • 非常感谢!如果我以后遇到这个话题,我可以问更多关于这个话题的问题吗?
  • @proggy 如果它是全新的,最好提出一个新问题以获得更多响应,但如果它是相关的,请随时在这里问我。
  • 我一直对您的解决方案有疑问。你帮我处理了upperindex,但是关于lowerindex 有一个问题,至少对我来说:因为int indexLower = (i - 1) % ARRAYSIZE;我们得到 i-1 等于 -1 并且这是越界异常。怎么解决?
  • @proggy 如果你让它循环,你为什么要试图落后呢?它将与i + 1 循环并返回相同的结果。
  • @proggy 例如,如果您想比较它之前和之后的值,只需将i + 1ii + 2 进行比较,结果是相同的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-07
  • 2014-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多