Примеры в этой статье делятся конкретным кодом игры Java Sudoku для вашей ссылки. Конкретный контент заключается в следующем
Я планирую установить компоненты, необходимые Javafx, и напрямую использовать Javafx, но кажется, что версия Eclipse неверна и не может быть использована даже после установки ...
Код Судоку был написан во время зимних каникул. Я выучил Java в течение месяца. Сейчас это кажется немного недостаточным, но в конце концов, это первая программа, поэтому я надеваю ее напрямую. Реализация окончательного диска Судоку напрямую использует насилие, а временная сложность немного высока. Я слишком ленив, чтобы изменить его и напрямую поместить код.
Окончательный внедрение диска:
импортировать java.util.random; открытый класс sudokupuzzgenerator {private random random = new random (); Частный статический окончательный финал int max_call_random_array_times = 220; private int currenttimes = 0; public int [] [] GeneratePuzzLematrix () {int [] [] randommatrix = new int [9] [9]; for (int row = 0; row <9; row ++) {if (row == 0) {currentTimes = 0; randommatrix [row] = buildrandomarray (); } else {int [] temprandomarray = buildrandomarray (); for (int col = 0; col <9; col ++) {if (currentTime <max_call_random_array_times) {if (! Iscandidatenmbfound (randommatrix, temprandomarray, row, col)) {resetvaluesinrowtozero (randommatrix, row); ряд -= 1; col = 8; temprandomarray = buildrandomarray (); }} else {row = -1; col = 8; ResetValueStozeros (Randommatrix); CurrentTime = 0; }}} return randommatrix; } private void resetValuesInroWtozero (int [] [] matrix, int row) {for (int j = 0; j <9; j ++) {matrix [row] [j] = 0; }} private void resetValueStozeros (int [] [] matrix) {for (int row = 0; row <9; row ++) {for (int col = 0; col <9; col ++) {matrix [row] [col] = 0; }}} Частный логический iscandidatenmbfound (int [] [] randommatrix, int [] randomarray, int row, int col) {for (int i = 0; i <9; i ++) {randommatrix [row] [col] = randomarray [i]; if (noconflict (randommatrix, row, col)) {return true; }} вернуть false; } Частный логический noconflict (int [] [] candidatematrix, int row, int col) {return noconflictinrow (candidatematrix, row, col) && noconflictincolumn (candidatematrix, row, col) && noconflictinblock (candidatematrix, row, col); } Частный логический noconflictinrow (int [] [] candidatematrix, int row, int col) {int currentValue = candidateMatrix [row] [col]; for (int colnum = 0; colnum <col; colnum ++) {if (currentValue == CandidateMatrix [row] [colnum]) {return false; }} вернуть true; } Частный логический noconflictincolumn (int [] [] candidateMatrix, int row, int col) {int currentValue = candidateMatrix [row] [col]; for (int rownum = 0; rownum <row; rownum ++) {if (currentValue == candidateMatrix [rownum] [col]) {return false; }} вернуть true; } Частный логический noconflictinblock (int [] [] candidateMatrix, int row, int col) {int baserow = row / 3 * 3; int basecol = col / 3 * 3; for (int rownum = 0; rownum <8; rownum ++) {if (candidatematrix [baserow + rownum / 3] [Basecol + Rownum % 3] == 0) {продолжить; } for (int colnum = rownum + 1; colnum <9; colnum ++) {if (candidatematrix [baserow + rownum / 3] [Basecol + Rownum % 3] == Candidatematrix [baserow + colnum / 3] [Basecol + colnum % 3]) {return false; }}} вернуть true; } private int [] buildrandomarray () {currentTimes ++; int [] array = new int [] {1, 2, 3, 4, 5, 6, 7, 8, 9}; int randomint = 0; for (int i = 0; i <20; i ++) {randomint = random.nextint (8)+1; int temp = массив [0]; массив [0] = массив [randomint]; массив [randomint] = temp; } return Array; } public int getCurrentTimes () {return CurrentTimes; } public void setCurrentTimes (int currentTimes) {this.currentTimes = currentTimes; }} Интерфейс и суждение:
Написано с качелями
импортировать javax.swing.*; Импорт java.awt.*; импортировать java.awt.event.*; импортировать java.util.random; открытый класс Shud Extens JFrame {Private Static Final Long SerialVersionUID = 5952689219411916553L; // serialize Field Private Static Jtextfield A [] [] = New JTextField [9] [9]; // Хранение чисел в текстовом поле static int ans [] [] = new int [9] [9]; // хранение входного двухзначного массива Sudokupuzzzzzerator Пример = New Sudokupuzzzzerator (); public int right [] [] = пример.generatepuzzleMatrix (); Public Int Rights [] []; private int [] [] wk (int a [] []) {// скрытый случайный r = new random (); int a1, a2; a1 = r.nextint (9); a2 = r.nextint (9); for (int i = 0; i <100; i ++) {a [a1] [a2] = 0; a1 = r.nextint (9); a2 = r.nextint (9); } вернуть a; } public shud () {контейнер c = getContentPane (); c.setlayout (new Borderlayout (2, 1)); // граница макет jmenuitem jmiok = new jmenuitem ("отправить"); // Определить меню jmenuitem jmiexplain = new jmenuitem («Подробности»); Jmenuitem jmimessage = new jmenuitem («Информация»); Jpanel panel = new jpanel (); // определить контейнерную панель.add (jmiok); // показать меню в контейнерной панели.add (jmiexplain); панель.add (jmimessage); JPanel P1 = новый JPanel (New Gridlayout (9, 9, 5, 5)); // Определите макет сетки из 9 рядов и 9 столбцов добавить (панель, borderlayout.north); // Поместите меню на север Add (P1, Borderlayout.center); // Поместите числа в средние правые = wk (справа); for (int k = 0; k <9; k ++) {for (int n = 0; n <9; n ++) {if (rightans [k] [n]! = 0) {a [k] [n] = new jtextfield ("+rightans [k] [n]); a [k] [n] .sethorizontalalInment (jtextfield.center); // Центр числа горизонтально a [k] [n] .setedible (false); // отображать только немодифицированный p1.add (a [k] [n]); // Добавить текстовое поле} else {a [k] [n] = new jtextfield (); [k] [n] .sethorizontalalInment (jtextfield.center); p1.add (a [k] [n]); }} add (p1); // Показать цифровую панель в контейнере jmiok.addactionListener (new ActionListener () {// Создать анонимное слушание событий Public void ActionPerformed (actionEvent e) {if (getText () == 1) {if (судья () == true) {joptionpane.showmessagegage (null, ваш ответ справа! »,« Результат », joptionpane.information_message);} else {joptionpane.showmessageDialog (null,« Ваш ответ прав! »,« Результат », joptionpane.information_message);} els неправильно! »,« Результат », joptionpane.information_message);}}}}}); exproplistenerclass alinger2 = new ExplseListenErclass (); jmiexplain.addactionListener (слушатель2); MessageListenerClass Slister3 = new MessageListenerClass (); jmimessage.addactionListener (слушатель3); } static int getText () // Получить текст текстового окна {int i, j; for (i = 0; i <9; i ++) {for (j = 0; j <9; j ++) {ans [i] [j] = 0; }} for (int k = 0; k <9; k ++) {for (int n = 0; n <9; n ++) {try // обработка исключений {ans [k] [n] = integer.parseint (a [k] [n] .getText ()); // конвертировать тип ответа в ANS} CATCH (NumberFormateXception nfe) {joptionPane.showmessageDialog (null, «включите не номеры в данные, пожалуйста, повторно введите»); возврат 0; }}} return 1; } public static boolean dude () // судить, является ли входной ответ правильным {int i, j, k; int [] [] answer = ans; for (i = 0; i <9; i ++) {if (j (answer [i]) == false) // Судья, есть ли дублированные числа в каждом столбце вернуть false; } for (j = 0; j <9; j ++) // Судья, есть ли дубликаты в каждой строке {int [] newanswercolumn = new int [9]; for (i = 0; i <9; i ++) {newanswercolumn [i] = ответ [i] [j]; } if (j (newanswercolumn) == false) вернуть false; } for (i = 0; i <3; i ++) // Существуйте, есть ли дублированные числа в каждой девятой сетке {for (j = 0; j <3; j ++) {k = 0; int [] newanswer = new int [9]; for (int m = i * 3; m <i * 3 +3; m ++) {for (int n = j * 3; n <j * 3 +3; n ++) {newanswer [k] = ответ [m] [n]; K ++; }} if (judge9 (newanswer) == false) {return false; }} вернуть true; } public static boolean judge9 (int [] answer) {int i, j; for (i = 0; i <9; i ++) {for (j = 0; j <9; j ++) {if (i == j) продолжить; if (ответ [i] == Ответ [j]) // Если есть дубликаты чисел, верните false {return false; }}} вернуть true; // нет дубликатов чисел, вернуть true} public static void main (string [] args) {jframe frame = new shud (); Frame.setTitle ("Suduku"); Frame.setsize (600 900); Frame.SetLocationRelativeTo (null); frame.setDefaultCloseoPeration (jframe.exit_on_close); Frame.SetVisible (true); }} класс explsistenererclass реализует actionlistener {// event usingerpublic void actionperformed (actionevent e) {joptionpane.showmessageedialog (null, «Заполните числа, чтобы убедиться, что в каждой строке нет дупликации чисел, каждая колонка и каждая маленькая девять», «Объясните», JoptionPane.information_Message); }} класс MessageListenerClass реализует ActionListener {public void ActionPerformed (actionEvent e) {joptionPane.showmessageDialog (null, «сделано Wyx», «Сообщение», JoptionPane.information_message); }}Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.