⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 grid999.java

📁 数独的java实现
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
public class Grid999 {

	// A,B,C,D,E,F,G,H,I;分别代表不同的九个区域
	// A B C
	// D E F
	// G H I

	// 生成的顺序为 A B D C G F H E I
	int A[][], B[][], C[][], D[][], E[][], F[][], G[][], H[][], I[][];

	// 临时的变量的数组 用于存储生成的临时的区域的值 最后利用方法 getint1() 或 getint2()
	// 将一维数组转换为二维数组 最终将生成的二维的数组赋值个相应的区域
	int temp[];

	// tt1 3行3列
	// tt2 6行3列
	// tt3 6行6列
	// 用于存储用于生成条件的特定数组
	int tt1[][], tt2[][], tt3[][];

	// intT 临时变量 用于存储生成的随机数字和1-9的数字
	// sum 临时变量 用于存储循环的次数 大于特定值(intSum)时 重新执行
	// FHsum临时变量 用于(getFH()方法)存储循环的次数 大于特定值(intSum)时 重新执行
	int intT, sum, FHsum = 0;

	// intT1 intT2 均为3行3列的数组 用于getFH()方法 记录每次生成的纪录的数字
	// 用于判断生成的F H 数组是否符合要求(值均为4时才符合要求)
	int intI1[][], intI2[][];

	// 特定值 用于控制执行的次数
	final int intSum = 40;

	// 构造方法
	public Grid999() {
		mainTest();
	}

	// 控制程序的主方法
	public void mainTest() {

		temp = new int[9];
		tt1 = new int[3][3];
		tt2 = new int[6][3];
		tt3 = new int[6][6];
		I = new int[3][3];
		E = new int[3][3];

		getA();

		getB();
		getD();

		getC();
		getG();

		getF();
		getH();
		boolean b = false;
		// 使用循环来得到数组 F H
		while (getFH() == false) {
			if (b) {
				b = false;
				getF();
			} else {
				b = true;
				getH();
			}
		}
		getE();
		getI();

		printAll();
	}

	// 用于生成的数组不符合要求的时候 重新生成数组B D C G F H
	public void mainTest1() {
		getB();
		getD();

		getC();
		getG();

		getF();
		getH();
	}

	// 生成数组 A
	public void getA() {
		sum = 0;
		intT = 0;

		// 生成的不重复的数组的值 将其赋值给temp临时数组
		for (int i = 0; i < 9;) {
			intT = (int) (Math.random() * 9 + 1);

			// sum大于特定值时 重新生成自己本身 并将值全部清空为0
			if (sum++ > intSum) {
				intT = 0;
				i = 0;
				sum = 0;
			}
			for (int j = 0; j < i; j++) {
				// 判断生成的值是否已经存在 存在就赋值为0 退出本次循环
				if (intT == temp[j] && i != 0) {
					intT = 0;
					break;
				}
			}
			// 判断生成的值是否出现过 不是0就是没有出现过 记录并循环生成下一个值
			if (intT != 0) {
				temp[i] = intT;
				i++;
			}
		}
		// System.out.println(sum + " A");
		A = getint1(temp);// 调用方法将一维数组转换为二维数组
		// printInt(A);
	}

	// 生成数组 B
	public void getB() {
		sum = 0;
		intT = 0;

		// 生成用于判读条件时的数组 并存储与临时变量tt1中
		for (int i = 0; i < 3; i++) {
			for (int j = 0; j < 3; j++) {
				tt1[i][j] = A[i][j];
			}
		}

		for (int i = 0; i < 9;) {
			intT = (int) (Math.random() * 9 + 1);
			if (sum++ > intSum) {
				intT = 0;
				i = 0;
				sum = 0;
			}
			for (int j = 0; j < i; j++) {
				// 首先判断是否在本身的数组中出现过
				if (intT == temp[j] && i != 0) {
					intT = 0;
					break;
				}
			}

			// 循环判断条件
			if (intT != 0) {

				for (int k = 0; k < 3; k++) {
					// 小于3 表示第一行 和数组第一行比较判断 出现过就重新生成数字 并退出本次循环
					if (i < 3) {
						if (intT == tt1[0][k]) {
							intT = 0;
							break;
						}
						// 小于6 表示第一行 和数组第二行比较判断 出现过就重新生成数字 并退出本次循环
					} else if (i < 6) {
						if (intT == tt1[1][k]) {
							intT = 0;
							break;
						}
						// 小于9 表示第一行 和数组第三行比较判断 出现过就重新生成数字 并退出本次循环
					} else {
						if (intT == tt1[2][k]) {
							intT = 0;
							break;
						}
					}
				}
				if (intT != 0) {
					temp[i] = intT;
					i++;
				}

			}
		}
		// System.out.println(sum + " B");
		B = getint1(temp);
		// printInt(B);

	}

	// 生成数组 D
	public void getD() {
		sum = 0;
		intT = 0;

		// 同B
		for (int i = 0; i < 3; i++) {
			for (int j = 0; j < 3; j++) {
				tt1[i][j] = A[j][i];
			}
		}

		for (int i = 0; i < 9;) {
			intT = (int) (Math.random() * 9 + 1);
			if (sum++ > intSum) {
				intT = 0;
				i = 0;
				sum = 0;
			}
			for (int j = 0; j < i; j++) {
				if (intT == temp[j] && i != 0) {
					intT = 0;
					break;
				}
			}
			if (intT != 0) {

				for (int k = 0; k < 3; k++) {
					if (i < 3) {
						if (intT == tt1[0][k]) {
							intT = 0;
							break;
						}
					} else if (i < 6) {
						if (intT == tt1[1][k]) {
							intT = 0;
							break;
						}
					} else {
						if (intT == tt1[2][k]) {
							intT = 0;
							break;
						}
					}
				}
				if (intT != 0) {
					temp[i] = intT;
					i++;
				}

			}
		}
		// System.out.println(sum + " D");
		D = getint2(temp);
		// printInt(D);
	}

	// 生成数组 C
	public void getC() {
		sum = 0;
		intT = 0;

		// 同B
		for (int i = 0; i < 3; i++) {
			for (int j = 0; j < 3; j++) {
				tt2[i][j] = A[i][j];
				tt2[i + 3][j] = B[i][j];
			}
		}

		for (int i = 0; i < 9;) {
			intT = (int) (Math.random() * 9 + 1);
			if (sum++ > intSum) {
				intT = 0;
				i = 0;
				sum = 0;
			}
			for (int j = 0; j < i; j++) {
				if (intT == temp[j] && i != 0) {
					intT = 0;
					break;
				}
			}
			if (intT != 0) {

				for (int k = 0; k < 3; k++) {
					if (i < 3) {
						if (intT == tt2[0][k] || intT == tt2[3][k]) {
							intT = 0;
							break;
						}
					} else if (i < 6) {
						if (intT == tt2[1][k] || intT == tt2[4][k]) {
							intT = 0;
							break;
						}
					} else {
						if (intT == tt2[2][k] || intT == tt2[5][k]) {
							intT = 0;
							break;
						}
					}
				}
				if (intT != 0) {
					temp[i] = intT;
					i++;
				}

			}
		}
		// System.out.println(sum + " C");
		C = getint1(temp);
		// printInt(C);
	}

	// 生成数组 G
	public void getG() {
		sum = 0;
		intT = 0;

		// 同B
		for (int i = 0; i < 3; i++) {
			for (int j = 0; j < 3; j++) {
				tt2[i][j] = A[j][i];
				tt2[i + 3][j] = D[j][i];
			}
		}

		for (int i = 0; i < 9;) {
			intT = (int) (Math.random() * 9 + 1);
			if (sum++ > intSum) {
				intT = 0;
				i = 0;
				sum = 0;
			}
			for (int j = 0; j < i; j++) {
				if (intT == temp[j] && i != 0) {
					intT = 0;
					break;
				}
			}
			if (intT != 0) {

				for (int k = 0; k < 3; k++) {
					if (i < 3) {
						if (intT == tt2[0][k] || intT == tt2[3][k]) {
							intT = 0;
							break;
						}
					} else if (i < 6) {
						if (intT == tt2[1][k] || intT == tt2[4][k]) {
							intT = 0;
							break;
						}
					} else {
						if (intT == tt2[2][k] || intT == tt2[5][k]) {
							intT = 0;
							break;
						}
					}
				}
				if (intT != 0) {
					temp[i] = intT;
					i++;
				}

			}
		}
		// System.out.println(sum + " G");
		G = getint2(temp);
		// printInt(G);
	}

	// 生成数组 F
	public void getF() {
		sum = 0;
		intT = 0;

		// 同B
		for (int i = 0; i < 3; i++) {
			for (int j = 0; j < 3; j++) {
				tt2[i][j] = D[i][j];
				tt2[i + 3][j] = C[j][i];
			}
		}
		for (int i = 0; i < 9;) {
			intT = (int) (Math.random() * 9 + 1);
			if (sum++ > intSum) {
				intT = 0;
				i = 0;
				sum = 0;
			}
			for (int j = 0; j < i; j++) {
				if (intT == temp[j] && i != 0) {
					intT = 0;
					break;
				}
			}
			if (intT != 0) {

				for (int k = 0; k < 3; k++) {
					if (i < 3) {
						if (intT == tt2[0][k] || intT == tt2[i + 3][k]) {
							intT = 0;
							break;
						}
					} else if (i < 6) {
						if (intT == tt2[1][k] || intT == tt2[i][k]) {
							intT = 0;
							break;
						}
					} else {
						if (intT == tt2[2][k] || intT == tt2[i - 3][k]) {
							intT = 0;
							break;
						}
					}
				}
				if (intT != 0) {
					temp[i] = intT;
					i++;
				}

			}
		}
		// System.out.println(sum + " F");
		F = getint1(temp);
		// printInt(F);
	}

	// 生成数组 H
	public void getH() {
		sum = 0;
		intT = 0;

		// 同B
		for (int i = 0; i < 3; i++) {
			for (int j = 0; j < 3; j++) {
				tt2[i][j] = G[i][j];

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -