我需要编写一个程序来解决八个皇后问题,我不知道该怎么做,但我已经开始使用多维数组了。问题是我不知道如何从主类调用构造函数,只是为了检查数组是否构造正确,或者如何从方法中调用它。请帮忙吗?这是代码,它返回null。
import javax.swing.JOptionPane;
public class Eightqueens
{
private static int[][] board;
public static void main(String[] args)
{
JOptionPane.showMessageDialog(null,board);
}
public Eightqueens (int size)
{
size = 8;
board = new int[size][size];
int row;
int col;
for (row = 0; row < size; row++)
for (col = 0; col < size; col++)
board[row][col] = 0;
}
}
答案 0 :(得分:5)
你应该使用传递给构造函数的值,而不是覆盖它:
...
private int[][] board;
...
public Eightqueens (int size)
{
size = 8; // remove this
...
}
public int[][] getBoard()
{
return board;
}
public static void main(String[] args)
{
Eightqueens equeens = new Eightqueens (8); // create an instance
JOptionPane.showMessageDialog(null,equeens.getBoard()); // use accessor to get
// board
}
此外,在构造函数中初始化静态变量(board
)没有意义,因为您创建的每个新实例都会覆盖其值。我将其更改为非静态,然后您可以使用访问器方法(equeens.getBoard()
)从您的实例中获取它。
答案 1 :(得分:0)
要调用构造函数,必须“构造”一个新对象。
Eightqueens obj = new Eightqueens(5);
答案 2 :(得分:0)
当您使用new关键字实例化您的类对象时,您可以调用构造函数。 像这样:
public static void main(String[] args) {
Eightqueens eq = new Eightqueens(5);
}
答案 3 :(得分:0)
您可以通过创建一个新的Eightqueens实例来调用构造函数
int size = 1; // anything
new Eightqueens(size);
答案 4 :(得分:0)
此代码不返回 null,它不会返回任何内容。你永远不会打电话给你的构造函数:
public static void main(String[] args) {
Eightqueens eq = new Eightqueens(5);
}
答案 5 :(得分:0)
您无法再次调用构造函数。它只在代码的开头运行。
但是,您可以创建它的新实例以再次运行它。
答案 6 :(得分:0)
对话框为空,因为 board 的值为 nothing ,这是因为它尚未初始化。 board 在构造函数方法中获取一个值。因此,您必须在显示对话框之前调用构造函数方法。
public static void main(String[] args)
{
Eightqueens eq = new Eightqueens(8);
JOptionPane.showMessageDialog(null,board);
}
此外,在构造函数方法中,您将覆盖之前给出的 size 的值。因此,实际上不需要将变量提供给该方法。所以,要么删除该行:
size = 8;
或者,更改构造函数方法以不输入值,如下所示:
public Eightqueens ()
{
int size = 8;
board = new int[size][size];
int row;
int col;
for (row = 0; row < size; row++)
for (col = 0; col < size; col++)
board[row][col] = 0;
}