Java 交换相反行/列中所有整数或字符的二维数组
我觉得这个问题在我的头脑中得到了扭转,因为行和列很容易混淆。有人能告诉我哪里出了问题吗Java 交换相反行/列中所有整数或字符的二维数组,java,arrays,multidimensional-array,char,int,Java,Arrays,Multidimensional Array,Char,Int,我觉得这个问题在我的头脑中得到了扭转,因为行和列很容易混淆。有人能告诉我哪里出了问题吗 public static void switchRows( int[][] anArray ){ int num = 1; for(int i = 0; anArray.length > i; i++){ for(int j = 0; anArray[i].length > j; j++){ int[][] temp = new int[
public static void switchRows( int[][] anArray ){
int num = 1;
for(int i = 0; anArray.length > i; i++){
for(int j = 0; anArray[i].length > j; j++){
int[][] temp = new int[anArray.length][anArray[i].length];
temp[i] = anArray[i];
anArray[i] = anArray[anArray.length - num];
anArray[anArray.length - num] = temp[i];
}
num++;
}
}
public static void switchColumns( char[][] anArray ){
int col = 1;
for(int i = 0; anArray.length > i; i++){
for(int j = 0; anArray[i].length > j; j++){
char[][] temp = new char[anArray.length][anArray[i].length];
temp[j] = anArray[j];
anArray[j] = anArray[anArray[i].length - col];
anArray[anArray[i].length - col] = temp[j];
}
col++;
}
}
行是水平的,列是垂直的。根据您的描述,您有如下内容:
COLUMN 1 | Column 2
ROW 1 | 'a' | 'b'
ROW 2 | 'x' | 'y'
使用2d数组,您将拥有var myVar[ROW][COLUMN]
因此,myVar[1][2]
的值将是“b”,即第1行和第2列
这个程序听起来需要两个函数。
第一个应该将行(switchRows
)、row1
的值与row2
交换,这样您就可以:
COLUMN 1 | Column 2
ROW 1 | 'x' | 'y'
ROW 2 | 'a' | 'b'
myVar[1][2]
的值将是“y”
另一个should函数应该将列(switchColumns
)、column1
的值与column2
进行交换,这样您就可以
COLUMN 1 | Column 2
ROW 1 | 'b' | 'a'
ROW 2 | 'y' | 'x'
执行此操作后,myVar[1][2]
的值将为“a”
作为如何执行此操作的提示,按照所述从内到外交换数组(因此[1,2,3,4,5]
到[5,4,3,2,1]
)与颠倒数组中元素的顺序相同。尝试将元素添加到新数组中,但从原始数组的末尾开始,从头开始
编辑:
还有几点需要注意:
在每次迭代中,通过内部for
循环重新声明临时数组,从而有效地重置它
此外,您实际上只需要一个函数来执行实际的交换。在伪代码中:
public int[] swap(int[] stuff){
//do the swapping here
return swappedStuff;
}
public int[][] innerSwap(int[][] stuff){
//go through every char[] and set it equal to swap(char[])
return innerSwappedStuff;
}
试试这个代码。在switchRows
中,我们使用pivot变量tmp
交换行中相反的单元格值。表达式[anArray.length-i-1][j]
提供了opossite行中单元格的索引,但位于同一列中,指向[i][j]
。还要注意,我们迭代了一半的行(anArray.length/2)
,并且交换操作不需要额外的数组。对于开关柱
程序为模拟程序
public static void switchRows(int[][] anArray) {
for (int i = 0; i < anArray.length/2; i++) {
for (int j = 0; j < anArray[i].length; j++) {
int tmp = anArray[i][j];
anArray[i][j] = anArray[anArray.length - i -1][j];
anArray[anArray.length - i -1][j] = tmp;
}
}
}
public static void switchColumns(char[][] anArray) {
for (int i = 0; i < anArray.length; i++) {
for (int j = 0; j < anArray[i].length/2; j++) {
char tmp = anArray[i][j];
anArray[i][j] = anArray[i][j + anArray[i].length - 1];
anArray[i][j + anArray[i].length - 1] = tmp;
}
}
}
publicstaticvoidswitchrows(int[]]anArray){
对于(int i=0;i
对行尝试此操作。您可以使用main进行测试:
public class ArrayRowSwitcher {
public static int[][] switchRows(int[][] anArray) {
int rows = anArray.length;
int columns = anArray[0].length;
int[][] result = new int[rows][columns];
for (int i = 0; rows > i; i++) {
for (int j = 0; j < anArray[i].length; j++) {
result[rows - i - 1][j] = anArray[i][j];
}
}
return result;
}
public static void main(String[] args) {
int[][] test = new int[][] {{1,1,1},{2,1,1},{3,1,1},{4,1,1},{5,1,1},{6,1,1}};
int[][] result = switchRows(test);
for (int i =0;i<test.length;i++){
System.out.print("printing row " +i + " --> ");
for (int j =0;j<test[0].length;j++){
System.out.print(result[i][j]);
}
System.out.println("-----------------");
}
}
}
公共类ArrayRowSwitcher{
公共静态int[]switchRows(int[]anArray){
int rows=anArray.length;
int columns=anArray[0]。长度;
int[][]结果=新的int[行][列];
对于(int i=0;行>i;i++){
对于(int j=0;j