将二维数组从行转换为块 [英] convert an 2d array from rows to blocks
本文介绍了将二维数组从行转换为块的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我试图用这段代码工作数周。
我需要将2d数组中的行和列转换为块。
它应该在大小为n * n的任何矩阵上工作。 (已经为我指定了数组的大小)
例如:
此:
I am trying to work in this code for weeks. I need to convert rows and columns in a 2d array to blocks. it should work on any matrix in size n*n. (that I have been given the size of the array) for example: this:
int[][] input = {{1,2,3,4,5,6,7,8,9},
{1,2,3,4,5,6,7,8,9},
{1,2,3,4,5,6,7,8,9},
{1,2,3,4,5,6,7,8,9},
{1,2,3,4,5,6,7,8,9},
{1,2,3,4,5,6,7,8,9},
{1,2,3,4,5,6,7,8,9},
{1,2,3,4,5,6,7,8,9},
{1,2,3,4,5,6,7,8,9}} ;
this is need to be the output:
{{1,2,3,1,2,3,1,2,3}
{4,5,6,4,5,6,4,5,6}
{7,8,9,7,8,9,7,8,9}
{1,2,3,1,2,3,1,2,3}
{4,5,6,4,5,6,4,5,6}
{7,8,9,7,8,9,7,8,9}
{1,2,3,1,2,3,1,2,3}
{4,5,6,4,5,6,4,5,6}
{7,8,9,7,8,9,7,8,9}}
我总是停留在某个地方。
I always stuck in some point.
这就是我写的代码:
sqrtN is the size.
在上述情况下,此处的sqrtN为3。
in the case that mentioned above, the sqrtN here is 3.
` public static int[][] blocks(int[][] matrix, int sqrtN) {
int[][] blocks = matrix;
int i = 0;
int counter = 1;
while(counter+1<sqrtN){
int n = sqrtN;//"n" will the size of the matrix.
while(n<blocks.length){
int t = counter;
int j = 0;
while(t<blocks.length){
int k = n;
if(t==counter & i%n==0 & i>0)
j= t-1;
if(j%sqrtN==0)
i = 0;
while(k==n || k%sqrtN!=0){
int temp = blocks[t][i];
blocks[t][i] = blocks[j][k];
blocks[j][k] = temp;
i= i+1;
k= k+1;
}
j=j+sqrtN;
t=t+sqrtN;
}
n= n+sqrtN;
counter= counter+1;
}
i=counter;
}
return blocks;`
我真的很高兴找到
谢谢伙计们。
推荐答案
无需执行复杂的逻辑。尝试使用:
No Need to perform a complex logic. Try to use :
public static int[][] blocks(int[][] matrix, int sqrtN) {
int[][] blocks = matrix;
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix.length; j++){
blocks[i][j] = (i % sqrtN * sqrtN) + (j % sqrtN + 1) ;
}
}
return blocks;
}
这篇关于将二维数组从行转换为块的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文