我知道已经有几篇关于数独相关问题的帖子,但我不确定其中任何一个是否正是我正在寻找的内容......
我正在尝试使用 JPanels 和 JTextfields 在 Java 中构建一个空的数独板。我还需要使用另一个 JPanel 在右侧创建一个菜单。
棋盘本身是一个 9 x 9 的正方形,分为 9 个 3x3 的正方形。请注意,每个较小的正方形都由比常规正方形间边框更重的边框衬托。每个方块都是一个文本字段。编写程序,使文本字段中没有任何内容。用户可以根据需要在文本字段中输入内容,如果输入的话,就会显示数字。侧面有四个按钮,可让您解决、获得新谜题、获得提示或重置谜题。
任何想法都会很棒。我无法理解如何嵌套 for 循环来创建板。这是我的代码...
import javax.swing.*;
import javax.swing.border.Border;
import java.awt.*;
public class ArrayTest extends JFrame {
public ArrayTest() {
JPanel board = new JPanel(new GridLayout(9, 9));
add(board);
JPanel[][] squares = new JPanel[9][9];
Border border = BorderFactory.createLineBorder(Color.BLACK);
for (int row = 1; row < 9; row++) {
for (int col = 1; col < 9; col++) {
squares[row][col] = new JPanel();
board.add(squares[row][col]);
}
}
JPanel menu = new JPanel();
menu.add(new JButton("Reset"));
menu.add(new JButton("Hint"));
menu.add(new JButton("Solve"));
menu.add(new JButton("New Puzzle"));
add(menu);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
/** Create a frame and set its properties*/
JFrame frame = new ArrayTest();
frame.setTitle("Sudoku");
frame.setSize(600, 600);
frame.setLocationRelativeTo(null); //Center the frame
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
我看到一些事情:
我不认为你想要 9x9JPanel
就像你现在一样,但是 9x9JTextField
s。你可能想要 3x3JPanel
这样您就可以使每个部分的边框更粗。直接将它们明确地列出来而不是尝试在循环中进行可能会更容易。
你的循环计数器(和数组索引)应该从 0 开始,而不是 1。按照你现在的方式,循环只会执行 8 次。
您将需要跟踪每行、每列和每个 3x3 子组中的值。行和列就像在二维数组中一样简单。您可以考虑使用另一个数组数组来保存每个 3x3 区域中的值。这使得您可以在需要时更轻松地扫描这些值,并且对于将值放置在较小的 3x3 中可能很有用JPanel
s,如果你走那条路。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)