📄 sudoku.java
字号:
package gongju;
import java.awt.BorderLayout;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.text.DecimalFormat;
import java.util.HashMap;
import java.util.Vector;
import javax.swing.AbstractAction;
import javax.swing.Icon;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTable;
import javax.swing.KeyStroke;
/**
* This code was edited or generated using CloudGarden's Jigloo SWT/Swing GUI
* Builder, which is free for non-commercial use. If Jigloo is being used
* commercially (ie, by a corporation, company or business for any purpose
* whatever) then you should purchase a license for each developer using Jigloo.
* Please visit www.cloudgarden.com for details. Use of Jigloo implies
* acceptance of these licensing terms. A COMMERCIAL LICENSE HAS NOT BEEN
* PURCHASED FOR THIS MACHINE, SO JIGLOO OR THIS CODE CANNOT BE USED LEGALLY FOR
* ANY CORPORATE OR COMMERCIAL PURPOSE.
*/
public class Sudoku extends JFrame {
private JMenuBar menubar = new JMenuBar();
private JMenu menu1 = new JMenu("重新开始");// 文件
private JMenu menu2 = new JMenu("查看结果");// 文件
private JPanel jPanel1;
private JTable jTable1;
private HashMap ht_key = new HashMap();// 存放坐标和值的映射
private HashMap ht_value = new HashMap();// 存放值和坐标的映射
private Vector v = new Vector();
private String haha=new String();
public Sudoku() {
// super("九宫游戏");
init();
setvalue();
}
public void init() {
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
this.setJMenuBar(menubar);
MenuAction menu1item1 = new MenuAction("重新开始", null, "重新开始", 'N');
menu1.add(menu1item1);
MenuAction menu2item1 = new MenuAction("查看结果", null, "查看结果", 'O');
menu2.add(menu2item1);
menubar.add(menu1);
menubar.add(menu2);
{
jPanel1 = new JPanel();
BorderLayout jPanel1Layout = new BorderLayout();
jPanel1.setLayout(jPanel1Layout);
getContentPane().add(jPanel1, BorderLayout.CENTER);
{
jTable1 = new JTable(9, 9);
jTable1.setRowHeight(30);
jTable1.getAutoResizeMode();
jTable1.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
jPanel1.add(jTable1, BorderLayout.CENTER);
jTable1.addKeyListener(new KeyAdapter() {
public void keyReleased(KeyEvent evt) {
int key = evt.getKeyCode();
switch (key) {
case KeyEvent.VK_1:
break;
case KeyEvent.VK_2:
break;
case KeyEvent.VK_3:
break;
case KeyEvent.VK_4:
break;
case KeyEvent.VK_5:
break;
case KeyEvent.VK_6:
break;
case KeyEvent.VK_7:
break;
case KeyEvent.VK_8:
break;
case KeyEvent.VK_9:
break;
default:
JOptionPane.showMessageDialog(null, "只能输入数字1-9");
break;
}
}
});
}
}
pack();
setSize(400, 341);
setVisible(true);
}
public void ab() {
long start = System.currentTimeMillis();
// 测试所花时间
DecimalFormat df = new DecimalFormat("#,##0.###");// 格式化时间
for (int i = 0; i < v.size(); i++) {
int temp[] = (int[]) v.get(i);
int row = temp[0];
int column = temp[1];
}
while (ht_key.size() < 81) {
setvalue();
}
System.out.println("用时"
+ (df
.format(Double.valueOf(System.currentTimeMillis()
- start) / 1000)) + "秒!\n");
}
// 00,01,02,03,04,05,06,07,08
// 10,11,12,13,14,15,16,17,18
// 20,21,22,23,24,25,26,27,28
// 30,31,32,33,34,35,36,37,38
// 40,41,42,43,44,45,46,47,48
// 50,51,52,53,54,55,56,57,58
// 60,61,62,63,64,65,66,67,68
// 70,71,72,73,74,75,76,77,78
// 80,81,82,83,84,85,86,87,88
public void setvalue() {
long start = System.currentTimeMillis();
// 测试所花时间
DecimalFormat df = new DecimalFormat("#,##0.###");// 格式化时间
int a = geta();
int b = geta();
for (int i = 0; i < a; i++) {
for (int j = 0; j < b; j++) {
settable();
}
}
System.out.println(haha);
System.out.println("用时"
+ (df
.format(Double.valueOf(System.currentTimeMillis()
- start) / 1000)) + "秒!\n");
}
public void settable() {
int row = geta();
int column = geta();
int value = getb();
boolean check = false;
for (int i = 0; i < 9; i++) {
if (jTable1.getValueAt(row, i) == null
|| Integer.parseInt(jTable1.getValueAt(row, i).toString()) !=
value) {
if (jTable1.getValueAt(i, column) == null
|| Integer.parseInt(jTable1.getValueAt(i, column)
.toString()) != value) {
check = true;
} else {
check = false;
break;
}
} else {
check = false;
break;
}
// if (!haha.contains(row + "" + column + "" + value)) {
// check = true;
// } else {
// check = false;
// break;
// }
}
if (check) {
jTable1.setValueAt(value, row, column);
ht_key.put(row + "" + column, value);
v.add(new int[] { row, column });
// haha =haha+row + "" + column + "" + value + " ";
}
}
public int geta() {
int a = (int) Math.rint(Math.random() * 10);// 行,列0-8
return a == 9 || a == 10 ? 8 : a;
}
public int getb() {
int b = (int) Math.rint(Math.random() * 10);// 数值1-9
return b == 0 || b == 10 ? 1 : b;
}
/**
* @param args
*/
public static void main(String[] args) {
new Sudoku();
}
/**
* 工具按钮设置
*
* @author 510922198612304632
*
*/
class MenuAction extends AbstractAction {
/**
* @param text
* @param icon
* @param description
* @param accelerator
*/
public MenuAction(String text, Icon icon, String description,
char accelerator) {
super(text, icon);
putValue(ACCELERATOR_KEY, KeyStroke.getKeyStroke(accelerator,
Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));
putValue(SHORT_DESCRIPTION, description);
}
public void actionPerformed(ActionEvent e) {
String order = getValue(ACCELERATOR_KEY).toString();
System.out.println(order);
if (order.endsWith("N")) {
setvalue();
}
if (order.endsWith("O")) {
ab();
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -