2009-11-30 19 views
10

tengo,iteración matriz de una dimensión como matriz de dos dimensiones

int[10] oneDim = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, index = 0; 

como se muestra here, creamos la de los dos uno dimensional desde el origen. Pero ¿cómo iterar mi oneDim dentro for (index = 0; index < 10; index++) para que yo pudiera conseguir mi índice de la columna y índice de la filahaysin crear una nueva? Quiero que tiene este aspecto durante la impresión de sus índices a una matriz bidimensional (2x5):

0,0 
0,1 
1,0 
1,1 
2,0 
2,1 
3,0 
3,1 
4,0 
4,1 

Creo que el problema principal aquí es conseguir que el índice de columna y índice de la fila sin crear el dos dimensiones. ¿No es así?

+0

¿Huh? ¿Quieres que una matriz unidimensional parezca una matriz bidimensional? –

+0

@Simon Righarts: Esto es estándar. El compilador lo hace por ti todos los días. – jason

+0

tomiko, como puede ver, las personas están luchando por comprender su pregunta, sin esforzarse por resolver su problema. por favor revise su pregunta para que no tengamos que forzar nuestros cerebros para que lo entiendan. Estoy seguro de que lo que estás tratando de hacer es muy simple, una vez que te tomes el tiempo para expresarte, estoy seguro de que obtendrás una ayuda significativa. – pstanton

Respuesta

29

Si desea fila fila-mayor orden, dado rowIndex, columna columnIndex y está imitando (a falta de un mejor término) una matriz bidimensional con numberOfColumns columnas, la fórmula es

rowIndex * numberOfColumns + columnIndex. 

Si desea orden de las filas, la fila rowIndex, columna columnIndex dado y está imitando (a falta de un mejor término) una matriz bidimensional con numberOfRow filas, la fórmula es

columnIndex * numberOfRows + rowIndex. 

Así, suponiendo fila-mayor orden:

int[10] oneDim = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; 
int rows = 2; 
int columns = 5; 
for (int row = 0; row < rows; row++) { 
    for (int column = 0; column < columns; column++) { 
     System.out.println(row + ", " + column + ": " + oneDim[row * columns + column]); 
    } 
} 

Salida:

0, 0: 1 
0, 1: 2 
0, 2: 3 
0, 3: 4 
0, 4: 5 
1, 0: 6 
1, 1: 7 
1, 2: 8 
1, 3: 9 
1, 4: 10 

Y si insiste en la indexación utilizando un solo bucle for, asumiendo orden de las filas, la fórmula que se queremos es la siguiente:

int column = index % numberOfColumns; 
int row = (index - column)/numberOfColumns; 

Si está utilizando para la columna-principal, la fórmula que desea es la siguiente:

int row = index % numberOfRows; 
int column = (index - row)/numberOfRows; 

Así,

int[10] oneDim = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; 
int rows = 2; 
int columns = 5; 
for(int index = 0; index < 10; index++) { 
    int column = index % columns; 
    int row = (index - column)/columns; 
    System.out.println(row + ", " + column + ": " + oneDim[index]); 
} 

es la salida

0, 0: 1 
0, 1: 2 
0, 2: 3 
0, 3: 4 
0, 4: 5 
1, 0: 6 
1, 1: 7 
1, 2: 8 
1, 3: 9 
1, 4: 10 

como se esperaba.

+0

¡genial! esto es lo que quiero. gracias. : D –

+1

¿Quisiste decir "columna" -mayor orden en el segundo párrafo? Odio hacerte editar después de tantos años. :-) –

8

Los dos números que está mostrando se pueden calcular, en el orden en que los está mostrando, como index/2 y index%2 respectivamente. ¿Es eso lo que quieres decir con "el problema"?

+0

bien, ese es 'el problema'! gracias. : D –

2

Creo que esto es lo que intenta hacer ... convertir una matriz de un solo dim en una matriz de dos dim.

//this is just pseudo code...not real syntax 

int[10] oneDim = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; 

int first_dim = 5; 
int second_dim = 2; 

int[first_dim][second_dim] new_array; 

for (int fdi = 0; fdi < first_dim; fdi++){ 
    for (int sdi = 0; sdi < second_dim; sdi++) { 

     //this is the crux...you're calculating the one dimensional index to access the value 

     new_array[fdi][sdi] = oneDim[fdi*second_dim + sdi] 

    } 
} 
Cuestiones relacionadas