例如,假设我们有一个这样的数独板:
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;
}
请给我一些提示。代码片段也会有很大帮助。
编辑:这个线程以某种方式帮助我弄清楚了。是的,这是数独的一部分,我试图将板编码成一个数组。
我所做的是首先将输入字符串转换为二维数组(9x9)并用于int block = (row/3)*3 + (col/3);
准确计算每个元素所属的子块。