循环方式的java数组遍历

问题描述 投票:9回答:5

我有一个数组有1 2 3 4 5值。

array a = [ 1 , 2, 3, 4, 5]

现在我想以循环方式遍历它。我喜欢打印2 3 4 5 1或3 4 5 1 2或5 1 2 3 4等等。对此有什么算法吗?

编辑:我想以循环方式打印所有组合。我不想在初始阶段说出起点。

java arrays traversal
5个回答
20
投票
int start = ...
for (int i = 0; i < a.length; i++) {
    System.out.println(a[(start + i) % a.length]);
}

(如果要从start向后迭代数组,请在数组下标表达式中将start + i更改为start - i。)

我应该注意,就执行速度而言,这可能不是表达循环的最有效方式。但是,差异很小,而且很可能无关紧要。

更相关的一点是,以这种方式使用%是否会提供更易读的代码。我认为确实如此,但也许那是因为我之前看过/使用过这种特殊的习语。


1
投票

以下内容如何:

int start = // start position, must be in bounds
int i = start;
do {

   ....

   i++;
   if(i == a.length) i = 0;
} while(i != start);

1
投票
int st = n ; // n is the starting position from where you print
for(int i = st; i < a.length; i++)
{
   -- print each array[i];
}

if(st != 0)
{
   for(int i = 0 ; i < st ; i++)
   {
      --- print each array[i];
   }
}

1
投票

基本上你只需要循环遍历数组,并在必要时更改当前索引(比如在遇到结束时将其移动到数组的开头)

public static void main(String[] args) {
    int[] array = new int[] { 1, 2, 3, 4, 5 };
    System.out.println(printCircularly(array, 4));
}

private static String printCircularly(int[] array, int startIndex) {
    StringBuilder sb = new StringBuilder();
    int currentIndex = startIndex;
    do {
        sb.append(array[currentIndex++]);
        if (currentIndex > array.length - 1) {
            currentIndex = 0;
        }
    }
    while (currentIndex != startIndex);
    return sb.toString();
}

1
投票

除了Stephen C的答案

int start = ...

for (int i = 0; i < a.length; i++) {
    System.out.println(a[(start - i + a.length) % a.length]);
}

用于从起始索引开始的反向循环。这有点不清楚,但在某些情况下非常有用。例如:UI组件,如轮播。

并且没有ArrayIndexOutOfBoundsException!

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