所以我有一个代表数独板的9x9数组。我希望能够分成多个阵列,每个阵列都引用原始阵列。对于我可以简单地执行的行
int[] row = Board[0];
但是如何为列做到这一点?我也想为九个3x3块做类似的事情,但是一旦我找出了列,我应该没问题。我意识到2d数组只是1d数组的1d数组,所以我可能需要迭代,但我似乎无法解决任何问题。
感谢任何帮助。谢谢
答案 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
索引才能访问该列。所以你有两个选择:
请注意,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;
}
}
}