我正在扫描一个文本文件,该文件有一个带有几个分隔符的数独板。 这就是示例输入的样子。
1 - - | 4 5 6 | - - -
5 7 - | 1 3 b | 6 2 4
4 9 6 | 8 7 2 | 1 5 3
======+=======+======
9 - - | - - - | 4 6 -
6 4 1 | 2 9 7 | 8 3 -
3 8 7 | 5 6 4 | 2 9 -
======+=======+======
7 - - | - - - | 5 4 8
8 r 4 | 9 1 5 | 3 7 2
2 3 5 | 7 4 $ | 9 1 6
其中它有"|"作为边框,=====+=====+=================================================================我制作此代码以忽略 |和 ====+====+======,但它跳过了代码的那部分并将它们声明为无效字符并在那里添加 0
public static int [][] createBoard(Scanner input){
int[][] nSudokuBoard = new int[9][9];
for (rows = 0; rows < 9; rows++){
for (columns = 0; columns < 9; columns++){
if(input.hasNext()){
if(input.hasNextInt()){
int number = input.nextInt();
nSudokuBoard[rows][columns] = number;
}//end if int
else if(input.hasNext("-")){
input.next();
nSudokuBoard[rows][columns] = 0;
System.out.print("Hyphen Found n");
}//end if hyphen
else if(input.hasNext("|")){
System.out.print("border found n");
input.next();
}// end if border
else if(input.hasNext("======+=======+======")){
System.out.print("equal row found n");
input.next();
}// end if equal row
else {
System.out.print("Invalid character detected at... n Row: " + rows +" Column: " + columns +"n");
System.out.print("Invalid character(s) replaced with a '0'. n" );
input.next();
}//end else
}//end reading file
}//end column for loop
}//end row for looop
return nSudokuBoard;
}//end of createBoard
我和一位导师谈过了,但我不记得他关于如何解决这个问题的建议。
要hasNext
的字符串参数被视为正则表达式。 您需要转义特殊字符:
else if(input.hasNext("\|")){
else if(input.hasNext("======\+=======\+======")){
http://ideone.com/43j7R
递增行计数器和列计数器,即使您使用边框或分隔符也是如此。 因此,即使在您修复了其他问题之后(如上一个答案中所述(,您也将在阅读所有输入之前完成矩阵的填充。只有在使用整数或短划线后,才需要修改代码以有条件地前进行计数器和列计数器。这意味着删除for
循环,将第一个if(input.hasNext())
更改为while
,并在使用整数或短划线的位置添加rows++
和columns++
,并为nSudokuBoard[rows][columns]
设置值。 您还需要逻辑来确定何时递增rows
以及何时将columns
设置回0
。
风格上讲,您应该将rows
重命名为row
,columns
重命名为column
。