例如,假设我们有一个Sudoku板,如下所示:
0 0 6 5 8 9 7 4 3
0 5 0 0 0 0 0 6 0
7 0 9 0 6 0 1 0 0
0 3 0 0 0 2 0 8 7
0 0 1 0 0 0 4 0 0
8 9 0 6 0 0 0 5 0
0 0 2 0 5 0 3 0 6
0 7 0 0 0 0 0 9 0
3 1 8 4 9 6 5 0 0
我想将其存储到一个数组中,以便该数组的前9个元素是第一个子块,即值
{0 0 6 0 5 0 7 0 9}
然后是{5 8 9 0 0 0 0 6 0}
。我试图找到一种解决方案,但是我总是得到超出范围错误的数组索引,并且它太强了。类似于以下内容:
while(st.hasMoreTokens()) {
if(ctr == 27) {
c.addSubBlock(sb1);
c.addSubBlock(sb2);
c.addSubBlock(sb3);
sb1 = new SubBlock();
sb2 = new SubBlock();
sb3 = new SubBlock();
ctr = 0;
}
sb1.addElement(Integer.parseInt(st.nextToken()));
sb1.addElement(Integer.parseInt(st.nextToken()));
sb1.addElement(Integer.parseInt(st.nextToken()));
sb2.addElement(Integer.parseInt(st.nextToken()));
sb2.addElement(Integer.parseInt(st.nextToken()));
sb2.addElement(Integer.parseInt(st.nextToken()));
sb3.addElement(Integer.parseInt(st.nextToken()));
sb3.addElement(Integer.parseInt(st.nextToken()));
sb3.addElement(Integer.parseInt(st.nextToken()));
ctr+=9;
}
请给我一些提示。代码段也将有很大的帮助。
编辑:这thread以某种方式帮助我弄清楚了。是的,这是Sudoku的一部分,我正在尝试将开发板编码成一个数组。
我要做的是先将输入String转换为2d数组(9x9),然后使用
int block = (row/3)*3 + (col/3);
精确计算每个元素属于哪个子块。 最佳答案
创建一个3x3的子块数组
使用2个计数器(x&y)跟踪读取的每个元素在全板上的位置
将(x,y)处的值添加到子块(x / 3,y / 3)中
像这样:
SubBlock board[][] = new SubBlock[3][3];
int x, y;
for ( y=0; y<9; y++ )
for ( x=0; x<9; x++ )
board[y/3][x/3].addElement(Integer.parseInt(st.nextToken()));
board [0] [0]将是左上方的子块,board [2] [2]将是右下方的子块。
关于java - 如何遍历数独板?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9399696/