[英]Moving elements in an array, Java
對於二維數組,具有相同偶數索引(例如 [0][0])的值應移動到下一個偶數索引(例如 [2][2])。 偶數索引中的最后一個元素應移動到索引 [0][0] 對奇數位置的元素應重復相同的操作。 (例如 [1][1]、[3][3]、[5][5] 等)
這里有什么問題?
int [][] matrix2= matrix;
System.out.println(matrix2.length);
for (int i= 0; i < matrix2.length; i++) {
for (int j=0; j<matrix2[i].length; j++) {
if (i==j && j == matrix2.length-1) {
System.out.println(j);
System.out.println(matrix[matrix.length-1][matrix.length-1]);
matrix2[0][0]= matrix[i][j];
}
else if (i==j && j < matrix2.length-2) {
matrix2[i+2][j+2]= matrix[i][j];
}
}
}
盡管您沒有為您的問題提供任何代碼,但我仍然會給您這段代碼。 請注意,我沒有考慮如果 arrays 的兩級長度不均勻會發生什么。 為此,有一種方法可以更改此代碼,以便能夠計算嵌套數組何時或長度不均勻。
對於此代碼,我將僅解釋偶數代碼,並且還將解釋奇數代碼。 對於偶數,將最后一個偶數索引值保存到臨時變量。 然后 go 進入從最后一個偶數索引開始到索引 0 之前的循環。對於每個循環,將值從當前 position - 2 移動到當前 position。 循環結束時,將 [0][0] 分配給 temp 變量所持有的內容。
您應該很高興,因為從一個問題中,您得到了 4 種方法,一種用於打印數組,一種用於測試奇數,一種用於測試偶數,以及您的問題的代碼。
class Main {
public static boolean isOdd(int input){
return (input & 1) == 1;
}
public static boolean isEven(int input){
return (input & 1) == 0;
}
public static void printArray(int [][] input){
int lastFirstIndex = input.length - 1;
for ( int i = 0; i < input.length; i++ ){
int lastSecondIndex = input[i].length - 1;
for ( int j = 0; j < input[i].length; j++ ){
System.out.print(String.format("[%d][%d]:%d", i,j, input[i][j]));
if ( j != lastSecondIndex ) System.out.print("\t");
}
if ( i != lastFirstIndex ) System.out.println();
}
}
public static void main(String[] args) {
int a[][] = new int[8][8];
int temp;
for ( int i = 0; i < a.length; i++ ){
for ( int j = 0; j < a[i].length; j++ ){
a[i][j] = (i * 10) + j;
}
}
// Print before rearrange.
System.out.println("Before Rearrange:");
printArray(a);
int lastOddIndex = isOdd(a.length - 1)? a.length - 1 : a.length - 2;
int lastEvenIndex = isEven(a.length - 1)? a.length - 1 : a.length - 2;
temp = a[lastEvenIndex][lastEvenIndex];
for ( int i = lastEvenIndex; i > 0; i -= 2){
a[i][i] = a[i - 2][i - 2];
}
a[0][0] = temp;
temp = a[lastOddIndex][lastOddIndex];
for ( int i = lastOddIndex; i > 1; i -= 2){
a[i][i] = a[i - 2][i - 2];
}
a[1][1] = temp;
// Print After rearrange
System.out.println("\nAfter Rearrange:");
printArray(a);
}
}
因此,在有人否決了我的答案后,我決定將我的代碼更改為更動態和更高效的代碼,就像上面的示例一樣。 那是在您不知道如何使用該示例的情況下。 下面是新代碼。 現在數組可以是任何長度,除了小於 2。它甚至不必是相同的長度。 你可以有 8x7、8x8 8x4、4x8 或其他。 但最小長度是 2x2 矩陣。
class Main {
public static boolean isOdd(final int input){
return (input & 1) == 1;
}
public static boolean isEven(final int input){
return (input & 1) == 0;
}
public static void rotateBy2(int [][] input ){
if ( input == null ) return;
final int firstLVLength = input.length;
if ( firstLVLength < 3 ) return;
final int secondLVLength = input[0].length;
if ( secondLVLength < 3 ) return;
final int lastIndex = firstLVLength > secondLVLength? secondLVLength - 1 : firstLVLength - 1;
final int lastOddIndex = isOdd(lastIndex)? lastIndex : lastIndex - 1;
final int lastEvenIndex = isEven(lastIndex)? lastIndex : lastIndex - 1;
final int tempOdd = input[lastOddIndex][lastOddIndex];
final int tempEven = input[lastEvenIndex][lastEvenIndex];
for ( int i = lastIndex; i > 1; i-- ) input[i][i] = input[i - 2][i - 2];
input[0][0] = tempEven;
input[1][1] = tempOdd;
}
public static void printArray(final int [][] input){
final int lastFirstIndex = input.length - 1;
for ( int i = 0; i < input.length; i++ ){
final int lastSecondIndex = input[i].length - 1;
for ( int j = 0; j < input[i].length; j++ ){
System.out.print(String.format("[%d][%d]:%d", i,j, input[i][j]));
if ( j != lastSecondIndex ) System.out.print("\t");
}
if ( i != lastFirstIndex )System.out.println();
}
}
public static void main(String[] args) {
int a[][] = new int[8][8];
for ( int i = 0; i < a.length; i++ ){
for ( int j = 0; j < a[i].length; j++ ){
a[i][j] = (i * 10) + j;
}
}
// Print before rearrange.
System.out.println("Before Rearrange:");
printArray(a);
rotateBy2( a );
// Print After rearrange
System.out.println("\nAfter Rearrange:");
printArray(a);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.