当我在构造函数之外创建一个2D数组时,我无法调整它的大小,但当我在其中创建一个时,我无法访问它

时间:2016-01-22 22:04:57

标签: java arrays constructor

我尝试创建一个方法,该方法将创建一个包含2D布尔数组的对象,其中int参数为行数和列数。然后在类中,我有尝试获取该数组的长度和宽度的方法。我试图解决这个问题的两种方法是:

public GameOfLife(int rows, int cols) {
    boolean[][] society = new boolean[rows][cols];
}

public int numberOfRows() {
    return society.length;
}

在我的测试中,这次尝试给了我一个错误,即社会无法解决变量。然后我试了一下:

private boolean[][] society;

public GameOfLife(int rows, int cols) {
    boolean[][] temp = new boolean[rows][cols];
    society = temp;
}

编辑:哎呀,忘了为numberOfColumns添加我的方法:

public int numberOfColumns() {
    return cols;
}

但是这个问题是当我尝试时它返回0而不是4:

@Test
public void FailedTestingRowsAndCols(){
    GameOfLife g1 = new GameOfLife(4,4);

    assertEquals(4, g1.numberOfColumns());
}

我对此很新,所以如果这是一个愚蠢的问题,我道歉,但我不确定变量何时何地到期的所有细节,这给了我很多困难。谢谢你的帮助!

2 个答案:

答案 0 :(得分:0)

到目前为止,我发布的内容没有任何问题。以下示例适用于我:

public class GameOfLife {


  public static void main(String[] args) {
    GameOfLife g1 = new GameOfLife(4,4);
    System.out.println(g1);
  }

  private boolean[][] society;

  @Override
  public String toString() {
    final StringBuffer sb = new StringBuffer("GameOfLife{");
    sb.append("society=").append(society == null ? "null" : Arrays.deepToString(society));
    sb.append('}');
    return sb.toString();
  }

  public GameOfLife(int rows, int cols) {
    boolean[][] temp = new boolean[rows][cols];
    society = temp;
  }
}

答案 1 :(得分:0)

  

当我在构造函数之外创建一个2D数组时,我无法调整它的大小,但当我在其中创建一个时,我无法访问它

请注意,您永远无法调整阵列大小。创建的数组的大小已修复。您只是将当前数组分配给另一个新创建的数组(这会让您产生成功调整大小的幻觉)。

至于您无法访问的问题很可能是您创建的变量存在于 不同范围 中。

您可以使用以下代码(与您的代码非常相似),它对我来说很好。因此,我猜你的错误实际上并不是来自你展示的代码片段。

class TestRunner
{
    public static void main(String[] args){
        GameOfLife gol = new GameOfLife(5, 3);
        System.out.println(gol.getColumns());
        System.out.println(gol.getRows());      
    }
}

class GameOfLife
{
    private boolean[][] society;

    public GameOfLife(int rows, int cols){
        society = new boolean[rows][cols];
    }

    public int getColumns(){
        return society[0].length;
    }

    public int getRows(){
        return society.length;
    }
}

<强>输出:

5
3