📄 grid999.java
字号:
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 + -