所以我正在用Java编写一个迷你棋盘游戏程序。
该程序将读入标准输入并按照输入中的指示构建游戏。
为了帮助保持井井有条并提升我的oo技能,我使用Cell类作为nxn游戏中的单元格。
对于棋盘游戏,我需要将它全部放在一个文件中,并且它必须从static void main运行。
这是我的Cell课程的样子
public class Cell{
public int x;
public int y;
.
.
.
}
我想读取输入,并为每个单元格分配值,然后将单元格添加到列表中,例如ArrayList allCells。但是,我无法在静态环境中使用它。
我知道静态是一个单一的实例,所以我很困惑我会怎么做。无论如何,我可以使用基于类的系统来解决这个问题。每个单元格都是它自己的单独对象,所以制作统计数据是行不通的。
任何种类的解释或替代方案都会令人惊叹!希望我在描述中足够清楚。
答案 0 :(得分:1)
最好的方法是让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();
...
}
}
没有static
类的Cell
修饰符,在new Cell()
内调用main()
时会出现编译错误(我猜这基本上是你的问题)有...)。
另一种方法是将Cell
类修改为非public
。然后,您可以将其作为与游戏类相同的文件中的顶级类:
public class Game {
public static void main(String[] args) {
Cell c1 = new Cell();
Cell c2 = new Cell();
...
}
}
class Cell {
...
}
另一种替代方法是在Cell
方法中将main()
作为本地类:
public class Game {
public static void main(String[] args) {
class Cell {
...
}
Cell c1 = new Cell();
Cell c2 = new Cell();
...
}
}
然而,您只能在Cell
方法本身中使用main()
类;你无法在游戏的任何其他方法中利用Cell
结构。