簡體   English   中英

分割二維數組(JAVA)

[英]segmenting a two-dimensional array (JAVA)

給定一個數組Array [n] [n](其大小n為2的冪),我想遞歸處理該數組的象限。 如何獲取包含[0到(size / 2)] [0到(size / 2)]元素的數組片段? 我記得在python中,您可以使用[0:size / 2]之類的索引拼接,JAVA是否具有類似的方式來處理這些元素?

恐怕您不能完全做到這一點。

如果您只需要一維數組,則可以使用1

Arrays.copyOfRange(T[] original, int from, int to)

這很冗長,但與Python中的切片基本相同。

但是,由於您需要一個二維數組(在Java中以數組形式實現 ),因此需要這樣的代碼:

class QArray {
  private Integer[][] array;
  private int quadrantSize;

  public QArray(Integer[][] array) {
    this.array = array;
    this.quadrantSize = array.length / 2;
  }

  public QArray getQuadrant(int quadrant) {
    QArray quadrantArray;

    switch(quadrant) {
      case 1:
        quadrantArray = getQuadrant(0, quadrantSize);
        break;
      case 2:
        quadrantArray = getQuadrant(0, 0);
        break;
      case 3:
        quadrantArray = getQuadrant(quadrantSize, 0);
        break;
      case 4:
        quadrantArray = getQuadrant(quadrantSize, quadrantSize);
        break;
      default:
        throw new IllegalArgumentException("Invalid quadrant: " + quadrant);
    }
    return quadrantArray;
  }

  private QArray getQuadrant(int startRow, int startCol) {
    Integer[][] quadrantArray = new Integer[quadrantSize][];
    for (int r = 0; r < quadrantSize; r++) {
      quadrantArray[r] = Arrays.copyOfRange(array[startRow + r], startCol, startCol + quadrantSize);
    }

    return new QArray(quadrantArray);
  }    
}

哪里:

System.out.println(qArray);
System.out.println(qArray.getQuadrant(2));
System.out.println(qArray.getQuadrant(1));
System.out.println(qArray.getQuadrant(3));
System.out.println(qArray.getQuadrant(4));

對於一些qArray會給你:

[ 1,  2,  3,  4]
[ 5,  6,  7,  8]
[ 9, 10, 11, 12]
[13, 14, 15, 16]

[ 1,  2]
[ 5,  6]

[ 3,  4]
[ 7,  8]

[ 9, 10]
[13, 14]

[11, 12]
[15, 16]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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