我已经扩展了一个类,希望通过使用set1sub(sub.local)方法来存储全局数组(使类中的数组被另一个对象看到)
public class BattleShipsClient extends ShipLocations implements Runnable, BattleShipConstants
{
BattleShipsClient()
{
}
public void placeBoard(int player) throws IOException// this is only called once and not updated when clicked again
{
while(getLocations())
{
while(isWaiting())//true
{
toServer.writeInt(player);
int row = getRowSelected();
int col = getColumnSelected();
int choice=Integer.parseInt(JOptionPane.showInputDialog("Please 1 for a sub, 2 for a battleship and 3 for a destroyer"));
clickCount ++;
if(clickCount >2)
{
setLocation(false);
continueToPlay=true;
}
if (choice ==1 &&sub.placed==false)
{
String orientation =JOptionPane.showInputDialog("please enter your orientations");
if(orientation.equalsIgnoreCase("h"))
{
//row os the same
//column number will be sent, then plus one on the other side
sub.local = new int[2][2];
sub.local[0][0] =row;
sub.local[0][1]=col;
sub.local[1][0]=row;
sub.local[1][1] =col+1;
toServer.writeInt(row);
toServer.writeInt(col);
toServer.writeChar('s');
sub.placed=true;
setp1sub(sub.local);
/*setp1sub(new int[][]{{row,col},
{row,col+1}});*/
grid[row][col+1].setToken(getMyToken());
}
然后我有一个船舶Locations类但是当我创建一个船舶位置类的新对象并尝试读取这个数组时,它总是设置为[[0,0],[0,0]],我试过制作它是静态的和原子的
public class ShipLocations {
int [][] p1sub;
public ShipLocations()
{
p1sub = new int[2][2];
}
public int[][] getp1sub()
{
return p1sub;
}
public void setp1sub(int[][] local) {
for (int i = 0;i <local.length;i++)
{
for(int j = 0;j<local.length;j++)
{
p1sub [i][j]= local[i][j];
}
}
}
}
答案 0 :(得分:1)
每当您创建ShipLocations(或子类)的新实例时,都会调用构造函数,在您的情况下,重新初始化p1sub数组。
在您的设计中,您过度使用继承。您不应仅仅为了使用其方法和变量而继承自类。
将全局变量存储在类中:
public class ShipLocations {
static int [][] p1sub;
static{
p1sub = new int[2][2];
}
public static void setp1sub(...){...}
public static int[][] getp1sub(){...}
}
然后按类名使用它而不是创建实例:
int [][] x = ShipLocations.getp1sub();
尽管可能会避免使用全局变量。它被认为是糟糕的设计,在重用代码时可能会出现问题。 这样做的正确方法是将ShipLocations对象作为BattleShipsClient中的局部变量,并在初始化新实例时进行设置。然后,您将首先创建一个公共ShipLocation对象,并将其交给应该看到相同数组的每个客户端。