Java数独游戏代码
/* *存储数字的数组*/
static int[][]n = new int[9][9];
/* *生成一个随机数源数组,从中生成随机数*/
static int[] num = {1,2,3,4,5,6,7,8,9 };
公共静态void main(String[] args) {
//生成数字
for(int I = 0;我& lt9;i++){
//尝试填充数字的次数
int time = 0;
//填写数字
for(int j = 0;j & lt9;j++){
//生成数字
n[I][j]= generate num(time);
//如果返回值为0,说明卡住了,处理返回。
//返回处理的原理是:如果不是第一列,先回前一列,否则回前一行最后一列。
if(n[i][j] == 0){
//如果不是第一列,就倒一列。
if(j & gt;0){
j-= 2;
继续;
}else{//是第一列,然后回到上一行的最后一列。
I-;
j = 8;
继续;
}
}
//填充成功
if(isCorret(i,j)){
//初始化时间,为下一次填充做准备。
时间= 0;
}else{ //继续填充。
//增加了1倍
time++;
//继续填充当前单元格。
j-;
}
}
}
//输出结果
for(int I = 0;我& lt9;i++){
for(int j = 0;j & lt9;j++){
system . out . print(n[I][j]+" ");
}
system . out . println();
}
}
/**
*是否满足行、列、3X3区域不重复的要求?
* @param行行号
* @param col列号
* @return true代表合规。
*/
public static boolean is corret(int row,int col){
return(checkRow(row )& amp;检查线(栏)和。checkNine(row,col));
}
/**
*检查线路是否符合要求。
* @param行行号已检查
* @return true代表合规。
*/
公共静态布尔checkRow(int row){
for(int j = 0;j & lt8;j++){
if(n[row][j] == 0){
继续;
}
for(int k = j+1;k & lt9;k++){
if(n[row][j] == n[row][k]){
返回false
}
}
}
返回true
}
/**
*检查色谱柱是否符合要求。
* @param col检查列号
* @return true代表合规。
*/
公共静态布尔检查行(int col){
for(int j = 0;j & lt8;j++){
if(n[j][col] == 0){
继续;
}
for(int k = j+1;k & lt9;k++){
if(n[j][col] == n[k][col]){
返回false
}
}
}
返回true
}
/**
*检查3X3面积是否符合要求。
* @param行行号已检查
* @param col检查列号
* @return true代表合规。
*/
public static boolean check nine(int row,int col){
//获取左上角的坐标
int j = row/3 * 3;
int k = col/3 * 3;
//循环比较
for(int I = 0;我& lt8;i++){
if(n[j + i/3][k + i % 3] == 0){
继续;
}
for(int m = I+1;m & lt9;m++){
if(n[j+I/3][k+I % 3]= = n[j+m/3][k+m % 3]){
返回false
}
}
}
返回true
}
/**
*生成1-9之间的随机数。
*规则:生成的随机数放在数组的8次下标的位置。随着时间的增长,已经尝试过的号码将无法找回。
*说明:第一次从所有号码中随机抽取,第二次从前八个号码中随机抽取,以此类推。
*这样既保证了随机性,又不会重复没有达到要求的数字,提高了程序的效率。
*这个规则是这个算法的核心。
* @param time填充次数,其中0表示第一次填充。
* @返回
*/
public static int generate num(int time){
//在第一次尝试时初始化随机数字源数组。
if(time == 0){
for(int I = 0;我& lt9;i++){
num[I]= I+1;
}
}
//填充第65438次+00次,表示该位置已被卡住,将返回0,由主程序返回。
if(time == 9){
返回0;
}
//这不是第一次填充。
//生成一个随机数,它是数组的一个下标,把数组num中下标对应的数作为随机数。
int ranNum =(int)(math . random()*(9-time));
//将数字放在数组的最后一个时间位置,
int temp = num[8-time];
num[8-time]= num[ran num];
num[ranNum]= temp;
//返回一个数字
返回次数[8次];
}
}