【问题标题】:How to edit an array from another class in Java [duplicate]如何在Java中编辑另一个类的数组[重复]
【发布时间】:2013-12-18 12:28:51
【问题描述】:

我创建了一个 2d 数组(用作棋盘),在另一个类中我想获取我的数组并能够对其执行操作。

我的数组定义(类PlayingBoard):

public char[][] myGrid = new char[12][12];

现在我想从我的项目中的其他类操作这个数组。我试图在 not 中定义的类中调用此网格

int i, j;
for(i = 0; i < 12; i++) {
    for(j = 0; j < 12; j++) {
        PlayingBoard.myGrid[i][j] = 'x';
    }
}

我得到错误:

不能从静态上下文引用非静态变量myGrid

如何在第二课中引用、编辑和操作myGrid

【问题讨论】:

  • 声明中似乎有一个小的混淆——这应该是一个int 数组还是char 数组?看起来应该是char
  • @JonK char 数组,谢谢!

标签: java arrays static


【解决方案1】:

您必须更改以下两项之一:

  1. myGrid 声明为静态

    public static char[][] myGrid = new char[8][8];
    
  2. 通过对象实例访问myGrid

    PlayingBoard pb = new PlayingBoard();
    int i, j;
    for(i = 0; i < 12; i++) {
        for(j = 0; j < 12; j++) {
            pb.myGrid[i][j] = 'x';
        }
    }
    

【讨论】:

    【解决方案2】:

    答案指向使用静态数组,这让我从 OO 的角度感到难过。

    如何使用“addPiece”方法确保您的游戏板具有正确封装的结构?

    PlayingBoard myBoard = new PlayingBoard();
    
    int i, j;
    for(i = 0; i < 12; i++) {
        for(j = 0; j < 12; j++) {
            myBoard.addPiece(i,j, 'x');
        }
    }
    

    即便如此,如果您的作品本身是“智能的”,您将需要创建一个包装它们的对象,而不仅仅是存储一个字符。

    public PlayingPiece[][] _board = new PlayingPiece[8][8];
    

    此外,您在循环中使用了 12,但在初始化中使用了 8,因此预计会出现 IndexOutOfBounds 异常。

    【讨论】:

    • 感谢您指出我的错误,不过我只是在更新问题.. 我希望它对其他遇到此问题的人有用,而不是对它造成的混乱!
    猜你喜欢
    • 1970-01-01
    • 2017-04-06
    • 2015-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-24
    相关资源
    最近更新 更多