我有一个数组有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等等。 任何算法就此?
修改:我想以循环方式打印所有组合。我不想在初始阶段说出起点。
答案 0 :(得分: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 :(得分:1)
以下内容如何:
int start = // start position, must be in bounds
int i = start;
do {
....
i++;
if(i == a.length) i = 0;
} while(i != start);
答案 2 :(得分: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];
}
}
答案 3 :(得分: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();
}
答案 4 :(得分: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 !!!