簡體   English   中英

移動數組中的元素,Java

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM