在静态主方法中使用类



所以我正在用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结构。

相关内容

  • 没有找到相关文章

最新更新