我怎样才能在Java中复制二维数组的列和子数组?

时间:2014-11-12 04:51:36

标签: java arrays multidimensional-array reference

所以我有一个代表数独板的9x9数组。我希望能够分成多个阵列,每个阵列都引用原始阵列。对于我可以简单地执行的行

int[] row = Board[0];

但是如何为列做到这一点?我也想为九个3x3块做类似的事情,但是一旦我找出了列,我应该没问题。我意识到2d数组只是1d数组的1d数组,所以我可能需要迭代,但我似乎无法解决任何问题。

感谢任何帮助。谢谢

3 个答案:

答案 0 :(得分:0)

您可以尝试使用System.arraycopy

System.arraycopy(Object source, int StartingPosition, Object destination, int destinationPosition, int length);

或者你可以传统上使用2 for for循环:

假设oldArray是9x9,名为oldArray [9] [9]并且你有9,3x3数组叫做newArrays [9] [3] [3]

for(int i=0;i<9;i+=3) {
   for(int j=0;j<9;j++) {
       newArrays[i][j/3][j%3]=oldarray[i+j/3][j%3];
       newArrays[i+1][j/3][j%3]=oldarray[i+j/3][(j%3)+3];
       newArrays[i+2][j/3][j%3]=oldarray[i+j/3][(j%3)+6];
   }
}

答案 1 :(得分:0)

你不能本地做这件事。我的意思是没有迭代数组。在java中,您需要首先指定row索引才能访问该列。所以你有两个选择:

  1. 构建实用程序功能。
  2. 翻转数组(创建行列,反之亦然)。
  3. 请注意,Sudoko是一个受约束的问题(有趣的解决方法)。

     public static void main(String[] args) {
            // TODO code application logic here
            int[][] Board=new int[9][9];
            for(int i=0;i<Board.length;i++)
                for(int j=0;j<Board.length;j++)
                    Board[i][j]=((i+1)*(j+1));
    
             for(int i=0;i<Board.length;i++){
                for(int j=0;j<Board.length;j++)
                     System.out.print(Board[i][j]+" ");
                 System.out.println("");
             }
            System.out.println("$$$$");
            int index=1;
    
            System.out.println(Arrays.toString(copyColumn(1, Board)));
            System.out.println(Arrays.toString(flip(Board)[index]));
        }
        public static int[] copyColumn(int index, int[][] Board)
        {
            int[] result=new int[9]; int k=0;
            for(int i=0;i<Board.length;i++)
                for(int j=0;j<Board.length;j++)
                    if(j==index)
                    {
                       result[k]=Board[i][j];
                       k++;
                    }
            return result;
        }
    
        public static int[][] flip(int[][] Board)
        {
            int[][] result=new int[Board.length][Board.length];
            for(int i=0;i<Board.length;i++)
                for(int j=0;j<Board.length;j++)
                    result[i][j]=Board[j][i];
    
            return result;
        }
    

答案 2 :(得分:0)

您可以创建内部类。

public class Board {
int[][] board=new int[9][9];
Column column=new Column();

public class Column{
    public int[] getCol(int colIndex){
        int[] col=new int[board.length];
        for(int i=0;i<col.length;i++){
            col[i]=board[colIndex][i];
        }
        return col;
    }

    public void setValue(int rowIndex,int columnIndex,int value){
        board[columnIndex][rowIndex]=value;
    }
}

}