我写了下面的代码来走一半数组的对角线:
String[][] b = [a,b,c] [d,e,f] [g,h,i]; public void LoopDiag() for (int i = b.length - 1; i > 0; i--) { String temp = ""; for (int j = 0, x = i; x <= b.length - 1; j++, x++) { temp = temp+b[x][j]; } System.out.println(temp) } for (int i = 0; i <= b.length - 1; i++) { String temp = ""; for (int j = 0, y = i; y <= b.length - 1; j++, y++) { temp = temp+b[j][y]; } System.out.println(temp); } }
现在它打印对角线即电流输出:
g dh aei bf c
如何使其打印另外的半对角线,即所需的输出:
a db gec hf i
Nicolai.. 16
仅为测试目的初始化数组:
int dim = 5; char ch = 'A'; String[][] array = new String[dim][]; for( int i = 0 ; i < dim ; i++ ) { array[i] = new String[dim]; for( int j = 0 ; j < dim ; j++, ch++ ) { array[i][j] = "" + ch; } }
输出我们的矩阵:
for( int i = 0 ; i < dim ; i++ ) { for( int j = 0 ; j < dim ; j++, ch++ ) { System.out.print( array[i][j] + " " ); } System.out.println(); } System.out.println( "============================" );
来自对角线的元素索引有一个规则 - 它们的总和在一个对角线上是恒定的:
使用两个循环来提取所有对角线.
第一个循环提取对角线的上半部分:
for( int k = 0 ; k < dim ; k++ ) { for( int j = 0 ; j <= k ; j++ ) { int i = k - j; System.out.print( array[i][j] + " " ); } System.out.println(); }
第二个循环遍历对角线的下半部分:
for( int k = dim - 2 ; k >= 0 ; k-- ) { for( int j = 0 ; j <= k ; j++ ) { int i = k - j; System.out.print( array[dim - j - 1][dim - i - 1] + " " ); } System.out.println(); }
使用一个循环来提取所有对角线,但还有额外的迭代和一个额外的检查:
for( int k = 0 ; k < dim * 2 ; k++ ) { for( int j = 0 ; j <= k ; j++ ) { int i = k - j; if( i < dim && j < dim ) { System.out.print( array[i][j] + " " ); } } System.out.println(); }
输出:
A B C D E F G H I J K L M N O P Q R S T U V W X Y ============================ A F B K G C P L H D U Q M I E V R N J W S O X T Y更新
在评论中有关于矩形矩阵(高度!= 宽度)的问题.这是矩形矩阵的解决方案:
规则保持不变:来自同一对角线的元素索引的总和是不变的
索引的最小总和为0(对于索引为[0; 0]的矩阵中的第一个元素)
索引的最大总和是width + height - 2(对于矩阵中的最后一个元素,索引为[height-1; with-1])
初始化矩形矩阵仅用于测试目的:
int WIDTH = 7; int HEIGHT = 3; char ch = 'A'; String[][] array = new String[HEIGHT][]; for( int i = 0 ; i < HEIGHT ; i++ ) { array[i] = new String[WIDTH]; for( int j = 0 ; j < WIDTH ; j++, ch++ ) { array[i][j] = "" + ch; } }
打印我们的矩形矩阵:
for( int i = 0 ; i < HEIGHT ; i++ ) { for( int j = 0 ; j < WIDTH ; j++, ch++ ) { System.out.print( array[i][j] + " " ); } System.out.println(); } System.out.println( "============================" );
for( int k = 0 ; k <= WIDTH + HEIGHT - 2; k++ ) { for( int j = 0 ; j <= k ; j++ ) { int i = k - j; if( i < HEIGHT && j < WIDTH ) { System.out.print( array[i][j] + " " ); } } System.out.println(); }
输出:
A B C D E F G H I J K L M N O P Q R S T U ============================ A H B O I C P J D Q K E R L F S M G T N U
alex.. 5
自助一下,看看您需要遍历的索引:
#1 (0,0) -> a #2 (1,0) (0,1) -> bd #3 (2,0) (1,1) (0,2) -> gec #4 (2,1) (1,2) -> hf #5 (2,2) -> i
查看每次迭代中索引的变化,然后创建算法。没那么困难,所以自己动手做吧;)
自助一下,看看您需要遍历的索引:
#1 (0,0) -> a #2 (1,0) (0,1) -> bd #3 (2,0) (1,1) (0,2) -> gec #4 (2,1) (1,2) -> hf #5 (2,2) -> i
查看每次迭代中索引的变化,然后创建算法。没那么困难,所以自己动手做吧;)
仅为测试目的初始化数组:
int dim = 5; char ch = 'A'; String[][] array = new String[dim][]; for( int i = 0 ; i < dim ; i++ ) { array[i] = new String[dim]; for( int j = 0 ; j < dim ; j++, ch++ ) { array[i][j] = "" + ch; } }
输出我们的矩阵:
for( int i = 0 ; i < dim ; i++ ) { for( int j = 0 ; j < dim ; j++, ch++ ) { System.out.print( array[i][j] + " " ); } System.out.println(); } System.out.println( "============================" );
来自对角线的元素索引有一个规则 - 它们的总和在一个对角线上是恒定的:
使用两个循环来提取所有对角线.
第一个循环提取对角线的上半部分:
for( int k = 0 ; k < dim ; k++ ) { for( int j = 0 ; j <= k ; j++ ) { int i = k - j; System.out.print( array[i][j] + " " ); } System.out.println(); }
第二个循环遍历对角线的下半部分:
for( int k = dim - 2 ; k >= 0 ; k-- ) { for( int j = 0 ; j <= k ; j++ ) { int i = k - j; System.out.print( array[dim - j - 1][dim - i - 1] + " " ); } System.out.println(); }
使用一个循环来提取所有对角线,但还有额外的迭代和一个额外的检查:
for( int k = 0 ; k < dim * 2 ; k++ ) { for( int j = 0 ; j <= k ; j++ ) { int i = k - j; if( i < dim && j < dim ) { System.out.print( array[i][j] + " " ); } } System.out.println(); }
输出:
A B C D E F G H I J K L M N O P Q R S T U V W X Y ============================ A F B K G C P L H D U Q M I E V R N J W S O X T Y
在评论中有关于矩形矩阵(高度!= 宽度)的问题.这是矩形矩阵的解决方案:
规则保持不变:来自同一对角线的元素索引的总和是不变的
索引的最小总和为0(对于索引为[0; 0]的矩阵中的第一个元素)
索引的最大总和是width + height - 2(对于矩阵中的最后一个元素,索引为[height-1; with-1])
初始化矩形矩阵仅用于测试目的:
int WIDTH = 7; int HEIGHT = 3; char ch = 'A'; String[][] array = new String[HEIGHT][]; for( int i = 0 ; i < HEIGHT ; i++ ) { array[i] = new String[WIDTH]; for( int j = 0 ; j < WIDTH ; j++, ch++ ) { array[i][j] = "" + ch; } }
打印我们的矩形矩阵:
for( int i = 0 ; i < HEIGHT ; i++ ) { for( int j = 0 ; j < WIDTH ; j++, ch++ ) { System.out.print( array[i][j] + " " ); } System.out.println(); } System.out.println( "============================" );
for( int k = 0 ; k <= WIDTH + HEIGHT - 2; k++ ) { for( int j = 0 ; j <= k ; j++ ) { int i = k - j; if( i < HEIGHT && j < WIDTH ) { System.out.print( array[i][j] + " " ); } } System.out.println(); }
输出:
A B C D E F G H I J K L M N O P Q R S T U ============================ A H B O I C P J D Q K E R L F S M G T N U