import java.util.Scanner;
import java.io.File;
import java.io.FileNotFoundException;
public class ReadSudokuValuesIntoArray {
static int sudokuArray[][] = new int[9][9];
public static int[][] readArray() {
int[][] sudoku = new int[9][9];
Scanner sc = null;
try {
int i = 0, j = 0, count = 1;
sc = new Scanner(new File("vaildsudoku.txt"));
while (sc.hasNextInt()) {
if ((count % 9) == 0) {
sudoku[i][j] = sc.nextInt();
count++;
i++;
j = 0;
} else {
sudoku[i][j++] = sc.nextInt();
count++;
}
}
} catch (FileNotFoundException fnfe) {
System.out.println("No file found");
System.exit(1);
} finally {
sc.close();
}
return sudoku;
}
public static void printArray(int[][] array) {
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array[i].length; j++) {
System.out.print(array[i][j] + " ");
}
System.out.println();
}
}
public static boolean rowsAreValid(int[][] array) {
for (int i = 0; i < array.length; i++) {// 每一行
for (int j = 0; j < array.length-1; j++) {
for (int k = j+1; k < array.length; k++) {
if (array[i][j] == array[i][k]) {
return false;
}
}
}
}
return true;
}
public static boolean columsAreValid(int[][] array) {
for (int i = 0; i < array.length; i++) {// 每一行
for (int j = 0; j < array.length-1; j++) {
for (int k = j+1; k < array.length; k++) {
if (array[j][i] == array[k][i]) {
return false;
}
}
}
}
return true;
}
public static boolean regionsAreValid(int[][] array){
int [][] arrayTemp=new int [1][9];
int index=0;
for(int i=0;i<8;i=i+3){
for(int j=0;j<8;j=j+3){
//3*3小区域
for(int m=0;m<3;m++)
for(int n=0;n<3;n++){
arrayTemp[0][index]=array[i+m][j+n];
index++;
}
index=0;
if(!rowsAreValid(arrayTemp)){
return false;
}
}
}
return true;
}
public static boolean puzzleIsValid(){
sudokuArray = readArray();
return rowsAreValid(sudokuArray)&&
columsAreValid(sudokuArray)&&
regionsAreValid(sudokuArray);
}
public static void main(String[] args) {
if (puzzleIsValid()) {
printArray(sudokuArray);
} else {
System.out.println("错误啦");
}
}
}
刚刚写的,看看吧~~
/**把数组放进对应位置,看他是否集齐1~9
* 该方法也可以使用先排序
*/
public static boolean Valid(int[] array){
boolean temp[]=new boolean [9];
for(int i=0;i<9;i++)
temp[i]=false;
//把数组放进对应位置,看他是否集齐1~9
for(int i=0;i<9;i++)
{
if(array[i]>9||array[i]<1) return false;
temp[array[i]-1]=true;
}
boolean b=true;
for(int i=0;i<9;i++)
{
b= b && temp[i];
}
return b;
}
public static boolean rowsAreValid(int[][] array){
boolean b=true;
for(int i=0;i<9;i++){
b=b&&Valid(array[i]);
}
return b;
}
public static boolean columsAreValid(int[][] array){
boolean b=true;
int num[]=new int[9];
for(int i=0;i<9;i++){
for(int j=0;j<9;j++){
num[j]=array[j][i];
}
b=b&&Valid(num);
}
return b;
}
//3*3的化为1维
public static int[] arrayToLine(int[][] array,int m,int n){
int num[]=new int[9];
for(int i=0;i<3;i++)
for(int j=0;j<3;j++){
num[3*i+j]=array[m+i][n+j];
}
return num;
}
//各部分真假
public static boolean regionsAreValid(int[][] array){
boolean b=true;
int num[]=new int[9];
for(int i=0;i<3;i++){
for(int j=0;j<3;j++){
num=arrayToLine(array,3*i,3*j);
}
b=b&&Valid(num);
}
return b;
}
//数独真假
public static boolean puzzleIsValid(int[][] array){
return rowsAreValid(array)&&
columsAreValid(array)&&
regionsAreValid(array);
}
打印美化的就自己来了.
日食??不解压安装,如果需要的话再次插件
此外,安全的Eclipse配置的环境,它可以被编译在记事本中
。。。。。
好难啊