所以我正在用Java编写一个迷你棋盘游戏程序。
该程序将读取标准输入并按照输入中的指示构建游戏。
为了帮助保持井井有条并提升我的 oo java 技能,我正在使用 Cell 类在 nxn 游戏中充当单元格。
对于棋盘游戏,我需要将它们全部放在一个文件中,并且它必须从静态 void main 运行。
这是我的 Cell 类的样子
public class Cell{
public int x;
public int y;
.
.
.
}
我想读取输入,并为每个单元格分配值,然后将单元格添加到列表,例如 ArrayList allCells。但是,我不能在静态上下文中使用它。
我知道静态是一个单一的实例,所以我很困惑我将如何做到这一点。无论如何,我可以使用基于类的系统来解决这个问题。每个单元格都是它自己的单独对象,因此将其设置为统计是行不通的。
任何形式的解释或替代方案都会很棒!希望我的描述足够清楚。
最好的方法是将Cell
作为其自身文件中的顶级类,但您已经指出您需要在单个文件中提供所有内容。因此,我将牢记这一约束来回答。
您需要声明Cell
类本身是static
,以便在静态上下文中使用它。例如:
public class Game {
public static class Cell { // doesn't really need to be public
...
}
public static void main(String[] args) {
Cell c1 = new Cell();
Cell c2 = new Cell();
...
}
}
如果没有 Cell
类的 static
修饰符,在 main()
内部调用 new Cell()
时会出现编译器错误(我猜这基本上是您遇到的问题)。
另一种方法是将Cell
类修改为非public
。然后,您可以将其设置为与游戏类相同的文件中的顶级类:
public class Game {
public static void main(String[] args) {
Cell c1 = new Cell();
Cell c2 = new Cell();
...
}
}
class Cell {
...
}
另一种选择是在main()
方法中使Cell
成为本地类:
public class Game {
public static void main(String[] args) {
class Cell {
...
}
Cell c1 = new Cell();
Cell c2 = new Cell();
...
}
}
但是,您只能在 main()
方法本身中使用 Cell
类;您无法在游戏的任何其他方法中利用Cell
结构。