2014-10-31 53 views
0

我需要编写一个程序来解决八皇后问题,我不知道该怎么做,但我已经开始使用多维数组。问题是我不知道如何从主类调用构造函数,只是为了检查数组是否正确构造,或者如何从方法调用它。有人可以帮忙吗?这是代码,它返回null。如何从java中的main方法调用构造函数?

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

构造函数只调用,如果你实例化对象从这个班。所以问题是,你想在哪里实例化这个类? – bobbel 2014-10-31 12:19:06

回答

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())从您的实例中获取它。

0

要调用构造函数,必须“构造”一个​​新的对象。

Eightqueens obj = new Eightqueens(5); 
0

就在你用new关键字实例化你的类的对象时,你调用了你的构造函数。 这样的:

public static void main(String[] args) { 
    Eightqueens eq = new Eightqueens(5); 
} 
+1

这很有趣,为什么我们都选择5作为随机大小参数? – Dici 2014-10-31 12:20:34

0

您可以通过使Eightqueens

int size = 1; // anything 
new Eightqueens(size); 
0

的新实例,此代码调用构造函数开始不回报空,它不回报什么。你永远不会打电话给你的构造函数:

public static void main(String[] args) { 
    Eightqueens eq = new Eightqueens(5); 
} 
0

你不能再次调用你的构造函数。它只在代码的开始处运行。

但是,您可以创建一个新的实例以再次运行它。

0

对话框为空,因为的值为没有,这是因为它尚未初始化。 在构造函数方法中获得一个值。所以你必须在显示对话框之前调用构造函数方法。

public static void main(String[] args) 
{ 
     Eightqueens eq = new Eightqueens(8); 
     JOptionPane.showMessageDialog(null,board); 
} 

此外,在类的构造方法,要覆盖由先前给出大小的价值。因此,实际上不需要为该方法提供变量。所以,要么你删除行:

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; 
}