闲来无事,理了一下数独的判断逻辑,用java实现,代码如下

import java.util.logging.FileHandler;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.logging.SimpleFormatter;
/**************************************
使1-9每个数字在每一行、每一列和每一宫中都只出现一次
**************************************/
public class SuDoKu
{
//日志记录器
private static Logger logger =Logger.getLogger("SuDoKu");
static{
try{
//方法返回日志文件存放的路径
FileHandler fh = new FileHandler("D:/adrian/sudoku.log",true);
fh.setFormatter(new SimpleFormatter());
//fh.setEncoding("UTF-8");
logger.addHandler(fh);
logger.setLevel(Level.ALL);
}catch(Exception e){
logger.log(Level.WARNING,"------日志初始化异常------\r\n",e);
}
}

private static void display(int a[][]){
for(int i=0;i<9;i++){
String temp="";
for(int j=0;j<9;j++){
temp+="\t"+a[i][j];
}
logger.info(temp);
}
}
/**
* 判断数组是否合法
*/
public static boolean isLegal(int a[][]){
//判断横向、纵向
for(int i=0;i<9;i++){
for(int j=0;j<9;j++){
for(int k=j+1;k<9;k++){
//判断横向是否符合要求
if(a[i][j]!=0&&a[i][k]==a[i][j])
return false;
//判断纵向是否符合要求
if(a[j][i]!=0&&a[k][i]==a[j][i])
return false;
}
}
}
//判断九宫
int flag=0;
while(flag<6){
for(int i=0+flag;i<3+flag;i++){
for(int j=0+flag;j<3+flag;j++){
for(int k=i+1;k<3+flag;k++){
for(int l=j+1;l<3+flag;l++)
if(a[i][j]!=0&&
a[i][j]==a[i][l]&&
a[i][j]==a[k][j]&&
a[i][j]==a[k][l])
return false;
}
}
}
flag=flag+3;
}
return true;
}

//测试
public static void main(String[] args){
int [][] a={
{9,8,5,7,6,2,1,3,4},
{2,6,7,1,3,4,5,8,9},
{3,1,4,8,9,5,7,6,2},
{8,3,2,9,7,6,4,5,1},
{1,7,6,4,5,3,2,9,8},
{5,4,9,2,1,8,6,7,3},
{6,2,1,3,8,7,9,4,5},
{4,5,3,6,2,9,8,1,7},
{7,9,8,5,4,1,3,2,6}
};
boolean flag=isLegal(a);
if(flag){
logger.info("\t\t\t\t以下数组是数独");
display(a);
}else{
logger.info("\t\t\t\t以下数组不是数独");
display(a);
}
}
}

判断9X9数组是否是数独的java代码的更多相关文章

  1. java算法面试题:有数组a[n],用java代码将数组元素顺序颠倒

    package com.swift; import java.util.ArrayList; import java.util.Collections; import java.util.List; ...

  2. 剑指offer-第四章解决面试题思路(判断一个数组是否为二叉搜索树的后序遍历序列)

    二叉搜索树:二叉搜索树根节点的左边都比根节点小,右边都比根节点大. 例题:输入一个数组,判断是否为二叉搜索树的后序遍历序列,如果是,返回true,如果不是,返回flase,假设没有重复的元素. 思路: ...

  3. PHP如何判断一个数组是一维数组或者是二维数组?用什么函数?

    如题:如何判断一个数组是一维数组或者是二维数组?用什么函数? 判断数量即可 <?php if (count($array) == count($array, 1)) { echo '是一维数组' ...

  4. delphi 判断一个数组的长度用 Length 还是 SizeOf ?

    判断一个数组的长度用 Length 还是 SizeOf ?最近发现一些代码, 甚至有一些专家代码, 在遍历数组时所用的数组长度竟然是 SizeOf(arr); 这不合适! 如果是一维数组.且元素大小是 ...

  5. js如何判断一个数组

    typeof [] 为一个"object" 不能通过此方法判断一个数组 方法 1.instanceof方法,这个方法用的比较多. 2.这个是es5以后推荐的方法,Object.pr ...

  6. paip.判断文件是否存在uapi python php java c#

    paip.判断文件是否存在uapi python php java c# ==========uapi file_exists exists() 面向对象风格:  File.Exists 作者: 老哇 ...

  7. 如何判断一个GPS点是否在以另一个GPS点为圆心100米为半径的圆内(Java代码)

    题目乍一看,无从下手,仔细想了一下,原来只需要判断两个GPS点的直线距离是否<100米即可. Java代码如下: /** * 将两个经纬度坐标转化成距离(米) * * @param 2个GPS经 ...

  8. 判断php数组维度的小例子

    分享一例判断php数组维度的代码,供大家参考. 如下所示: <?php /** * 返回数组的维度 * @param [type] $arr [description] * @return [t ...

  9. [改善Java代码]动态加载不适合数组

    上一个建议解释了为什么要使用forName,本建议就说说哪些地方不适合使用动态加载. 如果forName要加载一个类,那它必须是一个类------8中基本类型就排除在外.它们不是一个具体的类. 其次它 ...

随机推荐

  1. 结对作业:四则运算(Java+JavaFX)

    一.简介 此程序是一个可自动生成,计算小学四则运算题目的项目. Github地址:https://github.com/czmDeRepository/SoftwareWork/tree/master ...

  2. Git的详细使用

    关于Git的详细使用,下面博主的博客写的非常的详细! 可以参考一下. https://blog.csdn.net/qq_19835247/article/details/104620042 人生需要准 ...

  3. VSCode 快速生成.vue基本模板、发送http请求模板

    安装vscode 官网:https://code.visualstudio.com/ 安装 Vetur 插件,识别 vue 文件 插件库中搜索Vetur,点击安装,安装完成之后点击重新加载 新建代码片 ...

  4. Python3 高级编程技巧(部分)

    目录: 在列表.字典.集合中筛选数据 为元组元素命名 通过列表.元组创建字典 字典排序 寻找字典的公共键 让字典保持有序 生成器函数 yield协程 同时遍历值与下标 在列表.字典.集合中筛选数据 很 ...

  5. Unity Prefab关联

    Unity3D研究院之Prefab里面的Prefab关联问题http://www.xuanyusong.com/archives/3042

  6. Mybatis 枚举类处理

    目录 类型处理器(TypeHandler) 内置的枚举处理器 EnumTypeHandler源码 自定义枚举类处理 通用枚举处理器 Git 类型处理器(TypeHandler) 无论是 MyBatis ...

  7. SpringCloud实战 | 第五篇:SpringCloud整合OpenFeign实现微服务之间的调用

    一. 前言 微服务实战系列是基于开源微服务项目 有来商城youlai-mall 版本升级为背景来开展的,本篇则是讲述SpringCloud整合OpenFeign实现微服务之间的相互调用,有兴趣的朋友可 ...

  8. 使用Vagrant 后发现虚拟机磁盘空间爆满的血泪填坑记

      现象:  用了几天vagrant后,发现docker 里的 Mysql5.7 服务无法启动,用docker ps 命令,发现mysql一直在反复重启, 查看mysql log 发现说磁盘空间不够, ...

  9. SpringBoot系列之从入门到精通系列教程

    对应SpringBoot系列博客专栏,例子代码,本博客不定时更新 Spring框架:作为JavaEE框架领域的一款重要的开源框架,在企业应用开发中有着很重要的作用,同时Spring框架及其子框架很多, ...

  10. Myabtis动态SQL,你真的会了吗?

    目录 前言 什么是动态SQL? 常用的标签 if choose.when.otherwise where foreach set sql include 总结 拓展一下 Mybatis中如何避免魔数? ...