java编写数独_求用java写一个数独游戏
展开全部
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写一个数独游戏相关推荐
- 用java编写圆锥_求java大神帮忙 求大神帮助!Java
导航:网站首页 > 求java大神帮忙 求大神帮助!Java 求java大神帮忙 求大神帮助!Java 相关问题: 匿名网友: 普通类 public class CircularA { //求圆 ...
- java编写正则表达式_如何用Java编写最快的表达式评估器之一
java编写正则表达式 当然,标题有点吸引人,但确实如此(您当然不相信自己没有伪造自己的基准,但这是另一回事了). 因此,上周我正在寻找一个小型且可用的库来评估数学表达式. 我几乎直接偶然发现了这个s ...
- python能制作游戏吗_如何用python写一个小游戏
广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 引言最近python语言大火,除了在科学计算领域python有用武之地之外,在游 ...
- jQuery 一次定时器_用 jQuery 手写一个小游戏
作者:王圣松 转发链接:https://juejin.im/post/6844903687307919373 前言 今天给大家带来一个小游戏. 要求:熟悉 JavaScript 继承的概念. 游戏预览 ...
- java 斗地主桌号_求用java编写的斗地主程序就,要求可以在局域网内实现两桌以上同时玩。...
展开全部 客户端: import java.io.*; import java.net.*; import java.awt.*; import java.awt.event.*; public cl ...
- java编写万年历_怎么用JAVA编写万年历!
展开全部 /* 题目:输出任意年份任意月份的日历表(公元后) 思路: 1.已知1年1月1日是星期日,1 % 7 = 1 对应62616964757a686964616fe4b893e5b19e3133 ...
- 用java编写日历_如何用Java制作一个简易日历
简易日历制作 记录一下Java实现的一个日历小程序,效果图如下: 实现以上的效果,我们需要用到两个类:SimpleDateFormat和Calendar. 首先看看这两个类的用法: 类 SimpleD ...
- java编写程序实现求三角形、正方形和圆的面积
java编写程序实现求三角形.正方形和圆的面积,要求先设计一个公共的父类,在其中·定义求面积的方法,再继承得到各种形状 package practice3; abstract class shape{ ...
- 使用python制作聊天框解谜游戏_使用Python写一个小游戏alien invasion!
最近python语言大火,除了在科学计算领域python有用武之地之外,在游戏.后台等方面,python也大放异彩,本篇博文将按照正规的项目开发流程,手把手教大家写个python小游戏,来感受下其中的 ...
最新文章
- 如何判断第一位是1_如何快速判断1瓶红酒的价格,防止被坑?
- android中存放程序资源,Android 工程中存放各种程序资源的目录是()
- docker教程之从一头雾水到不一头雾水(1)
- linux下软件实施,linux系统未来或应用广泛
- 51NOD 1424 零树
- java map判断是否有键_检查Java HashMap中是否存在给定键
- zigbee传输速率_wifi智能开关和zigbee智能开关有哪些区别
- 思维导图,流程图模板整合
- 插件化、热补丁中绕不开的Proguard的坑
- 使用jQuery时报错:$未被定义
- mongodb和mysql空间占用_MongoDB的存储结构及对空间使用率的影响
- 可“一键”轻松激活Office 2010系列“VOL”版本的又一款迷你“KMS服务器”
- 8类网线利弊_8类网线家用行吗?
- 工作进度跟踪表excel_在Excel中跟踪时间
- 如何解决 IDEA 一直卡在 Preparing workspace
- 轮播图的两种方法及自动轮播
- 蜂蜜柚子茶最好的制作方法
- Oracle 10g在线整理碎片索引是否失效
- Attention Is All You Need翻译
- MVD(三-视图加入动画)
热门文章
- android漏洞检测工具,安卓“超级拒绝服务漏洞”分析及自动检测工具
- 2021年R1快开门式压力容器操作考试题及R1快开门式压力容器操作最新解析
- 互联网行业未来的发展前景
- 电路小常识USB接口定义
- 简述计算机仿真的基本步骤,计算机仿真技术试卷
- Restsharp获取微信小程序数据,返回错误,提示没权限。手机抓包和操作都有数据,如何破--请大神支招,可私聊
- linux系统ata1.00,SATA读取时 偶尔 发生错误
- linux硬盘对拷ghost,ghost+linux+DOM 硬盘对拷
- DVD Slideshow Builder V6.2 软件原创打包
- 【fraud detection】点击欺诈丛生 中国互联网广告一场骗局