展开全部

public class ShuDu {

/**存储数字的数组*/

static int[][] n = new int[9][9];

/**生成随机62616964757a686964616fe4b893e5b19e31333363376366数字的源数组,随机数字从该数组中产生*/

static int[] num = {1,2,3,4,5,6,7,8,9};

public static void main(String[] args) {

//生成数字

for(int i = 0;i < 9;i++){

//尝试填充的数字次数

int time = 0;

//填充数字

for(int j = 0;j < 9;j++){

//产生数字

n[i][j] = generateNum(time);

//如果返回值为0,则代表卡住,退回处理

//退回处理的原则是:如果不是第一列,则先倒退到前一列,否则倒退到前一行的最后一列

if(n[i][j] == 0){

//不是第一列,则倒退一列

if(j > 0){

j-=2;

continue;

}else{//是第一列,则倒退到上一行的最后一列

i--;

j = 8;

continue;

}

}

//填充成功

if(isCorret(i,j)){

//初始化time,为下一次填充做准备

time = 0;

}else{ //继续填充

//次数增加1

time++;

//继续填充当前格

j--;

}

}

}

//输出结果

for(int i = 0;i < 9;i++){

for(int j = 0;j < 9;j++){

System.out.print(n[i][j] + " ");

}

System.out.println();

}

}

/**

* 是否满足行、列和3X3区域不重复的要求

* @param row 行号

* @param col 列号

* @return true代表符合要求

*/

public static boolean isCorret(int row,int col){

return (checkRow(row) & checkLine(col) & checkNine(row,col));

}

/**

* 检查行是否符合要求

* @param row 检查的行号

* @return true代表符合要求

*/

public static boolean checkRow(int row){

for(int j = 0;j < 8;j++){

if(n[row][j] == 0){

continue;

}

for(int k =j + 1;k< 9;k++){

if(n[row][j] == n[row][k]){

return false;

}

}

}

return true;

}

/**

* 检查列是否符合要求

* @param col 检查的列号

* @return true代表符合要求

*/

public static boolean checkLine(int col){

for(int j = 0;j < 8;j++){

if(n[j][col] == 0){

continue;

}

for(int k =j + 1;k< 9;k++){

if(n[j][col] == n[k][col]){

return false;

}

}

}

return true;

}

/**

* 检查3X3区域是否符合要求

* @param row 检查的行号

* @param col 检查的列号

* @return true代表符合要求

*/

public static boolean checkNine(int row,int col){

//获得左上角的坐标

int j = row / 3 * 3;

int k = col /3 * 3;

//循环比较

for(int i = 0;i < 8;i++){

if(n[j + i/3][k + i % 3] == 0){

continue;

}

for(int m = i+ 1;m < 9;m++){

if(n[j + i/3][k + i % 3] == n[j + m/3][k + m % 3]){

return false;

}

}

}

return true;

}

/**

* 产生1-9之间的随机数字

* 规则:生成的随机数字放置在数组8-time下标的位置,随着time的增加,已经尝试过的数字将不会在取到

* 说明:即第一次次是从所有数字中随机,第二次时从前八个数字中随机,依次类推,

* 这样既保证随机,也不会再重复取已经不符合要求的数字,提高程序的效率

* 这个规则是本算法的核心

* @param time 填充的次数,0代表第一次填充

* @return

*/

public static int generateNum(int time){

//第一次尝试时,初始化随机数字源数组

if(time == 0){

for(int i = 0;i < 9;i++){

num[i] = i + 1;

}

}

//第10次填充,表明该位置已经卡住,则返回0,由主程序处理退回

if(time == 9){

return 0;

}

//不是第一次填充

//生成随机数字,该数字是数组的下标,取数组num中该下标对应的数字为随机数字

int ranNum = (int)(Math.random() * (9 - time));

//把数字放置在数组倒数第time个位置,

int temp = num[8 - time];

num[8 - time] = num[ranNum];

num[ranNum] = temp;

//返回数字

return num[8 - time];

}

}

本回答由网友推荐

已赞过

已踩过<

你对这个回答的评价是?

评论

收起

java编写数独_求用java写一个数独游戏相关推荐

  1. 用java编写圆锥_求java大神帮忙 求大神帮助!Java

    导航:网站首页 > 求java大神帮忙 求大神帮助!Java 求java大神帮忙 求大神帮助!Java 相关问题: 匿名网友: 普通类 public class CircularA { //求圆 ...

  2. java编写正则表达式_如何用Java编写最快的表达式评估器之一

    java编写正则表达式 当然,标题有点吸引人,但确实如此(您当然不相信自己没有伪造自己的基准,但这是另一回事了). 因此,上周我正在寻找一个小型且可用的库来评估数学表达式. 我几乎直接偶然发现了这个s ...

  3. python能制作游戏吗_如何用python写一个小游戏

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 引言最近python语言大火,除了在科学计算领域python有用武之地之外,在游 ...

  4. jQuery 一次定时器_用 jQuery 手写一个小游戏

    作者:王圣松 转发链接:https://juejin.im/post/6844903687307919373 前言 今天给大家带来一个小游戏. 要求:熟悉 JavaScript 继承的概念. 游戏预览 ...

  5. java 斗地主桌号_求用java编写的斗地主程序就,要求可以在局域网内实现两桌以上同时玩。...

    展开全部 客户端: import java.io.*; import java.net.*; import java.awt.*; import java.awt.event.*; public cl ...

  6. java编写万年历_怎么用JAVA编写万年历!

    展开全部 /* 题目:输出任意年份任意月份的日历表(公元后) 思路: 1.已知1年1月1日是星期日,1 % 7 = 1 对应62616964757a686964616fe4b893e5b19e3133 ...

  7. 用java编写日历_如何用Java制作一个简易日历

    简易日历制作 记录一下Java实现的一个日历小程序,效果图如下: 实现以上的效果,我们需要用到两个类:SimpleDateFormat和Calendar. 首先看看这两个类的用法: 类 SimpleD ...

  8. java编写程序实现求三角形、正方形和圆的面积

    java编写程序实现求三角形.正方形和圆的面积,要求先设计一个公共的父类,在其中·定义求面积的方法,再继承得到各种形状 package practice3; abstract class shape{ ...

  9. 使用python制作聊天框解谜游戏_使用Python写一个小游戏alien invasion!

    最近python语言大火,除了在科学计算领域python有用武之地之外,在游戏.后台等方面,python也大放异彩,本篇博文将按照正规的项目开发流程,手把手教大家写个python小游戏,来感受下其中的 ...

最新文章

  1. 如何判断第一位是1_如何快速判断1瓶红酒的价格,防止被坑?
  2. android中存放程序资源,Android 工程中存放各种程序资源的目录是()
  3. docker教程之从一头雾水到不一头雾水(1)
  4. linux下软件实施,linux系统未来或应用广泛
  5. 51NOD 1424 零树
  6. java map判断是否有键_检查Java HashMap中是否存在给定键
  7. zigbee传输速率_wifi智能开关和zigbee智能开关有哪些区别
  8. 思维导图,流程图模板整合
  9. 插件化、热补丁中绕不开的Proguard的坑
  10. 使用jQuery时报错:$未被定义
  11. mongodb和mysql空间占用_MongoDB的存储结构及对空间使用率的影响
  12. 可“一键”轻松激活Office 2010系列“VOL”版本的又一款迷你“KMS服务器”
  13. 8类网线利弊_8类网线家用行吗?
  14. 工作进度跟踪表excel_在Excel中跟踪时间
  15. 如何解决 IDEA 一直卡在 Preparing workspace
  16. 轮播图的两种方法及自动轮播
  17. 蜂蜜柚子茶最好的制作方法
  18. Oracle 10g在线整理碎片索引是否失效
  19. Attention Is All You Need翻译
  20. MVD(三-视图加入动画)

热门文章

  1. android漏洞检测工具,安卓“超级拒绝服务漏洞”分析及自动检测工具
  2. 2021年R1快开门式压力容器操作考试题及R1快开门式压力容器操作最新解析
  3. 互联网行业未来的发展前景
  4. 电路小常识USB接口定义
  5. 简述计算机仿真的基本步骤,计算机仿真技术试卷
  6. Restsharp获取微信小程序数据,返回错误,提示没权限。手机抓包和操作都有数据,如何破--请大神支招,可私聊
  7. linux系统ata1.00,SATA读取时 偶尔 发生错误
  8. linux硬盘对拷ghost,ghost+linux+DOM 硬盘对拷
  9. DVD Slideshow Builder V6.2 软件原创打包
  10. 【fraud detection】点击欺诈丛生 中国互联网广告一场骗局