2011-12-28 70 views
7

Tengo una matriz que tiene 1 2 3 4 5 valores.recorrido de matriz de java de manera circular

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

Ahora quiero recorrerlo de forma circular. como quiero imprimir 2 3 4 5 1 o 3 4 5 1 2 o 5 1 2 3 4 y así sucesivamente. cualquier algoritmo en esto?

Editar: Quiero imprimir toda la combinación de forma circular. No quiero indicar el punto de partida en su fase inicial.

Respuesta

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

debo señalar que esto probablemente no es la forma más eficaz de expresar el lazo ... en ter ms de velocidad de ejecución. Sin embargo, la diferencia es pequeña, y muy probablemente irrelevante.

Un punto más relevante es si el uso de % de esta manera proporciona un código más legible. Creo que sí, pero tal vez es porque he visto/usado este idioma en particular antes.

+0

bueno, mucho más limpio, realmente debería pensar más ... –

+0

Esta publicación completa realmente me recuerda ese estúpido problema del zumbido difuso, mucha gente contesta con soluciones no sensuales demasiado complicadas, cuando hay una manera más fácil de hacer las cosas sin esfuerzo – AlanFoster

+0

Le di un +1 para la solución de tres líneas que también trata con casos de límites externos :) Sin embargo, estoy de acuerdo con su problema de legibilidad- Creo que el ciclo parece ser una iteración normal a primera vista que puede no ser ideal . –

1

¿Qué hay de lo siguiente:

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

    .... 

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

¿cuál sería el valor de comenzar? No quiero corregir el valor de inicio –

+0

El inicio es donde quiera iniciar el recorrido en la matriz. Para imprimir 3 4 5 1 2, el inicio debe ser 2, o para imprimir 1 2 3 4 5 el inicio debe ser 0 - ¿Tal vez he entendido mal tu pregunta? –

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

Básicamente sólo tiene que recorrer la matriz, y cambiar el índice actual si es necesario (como se mueve hacia el comienzo de la matriz cuando se encuentra con el final)

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(); 
} 
Cuestiones relacionadas