我应该使用全局变量还是用java传递变量?

我应该使用全局变量还是用java传递变量?,java,global-variables,argument-passing,Java,Global Variables,Argument Passing,我正在创建一个基于2d瓷砖的sim卡游戏。 我有一个gridSquares的2d数组,可以从许多不同的类和方法中访问和更改。 我应该每次传递二维网格阵列,还是将其设置为全局网格?哪一种是最佳实践 我在想,创建一个只包含所有类都可以扩展的一组变量的类是不是一种选择?这是好主意还是坏主意/不是好做法 我对java还是相当陌生,所以我仍然在学习很多东西 提前谢谢 Rel如果您确实需要,在包含类(A)的网格中,将网格声明为公共网格,然后静态导入A类(导入静态A;)。这将使您能够在不扩展类的情况下与网格交

我正在创建一个基于2d瓷砖的sim卡游戏。 我有一个gridSquares的2d数组,可以从许多不同的类和方法中访问和更改。 我应该每次传递二维网格阵列,还是将其设置为全局网格?哪一种是最佳实践

我在想,创建一个只包含所有类都可以扩展的一组变量的类是不是一种选择?这是好主意还是坏主意/不是好做法

我对java还是相当陌生,所以我仍然在学习很多东西

提前谢谢


Rel

如果您确实需要,在包含类(A)的网格中,将网格声明为公共网格,然后静态导入A类(
导入静态A;
)。这将使您能够在不扩展类的情况下与网格交互

您的代码不应该从太多的地方访问网格。考虑重构代码,以避免不得不从整个地方操纵网格。分开你的顾虑。而且,像你提到的那样,使用继承绝对不是一个好主意。

如果你确定你只会有一个“二维网格阵列”,那么你可以始终使用单例模式,本质上使其全球化


尽管有支持和反对这一点的争论,但您可能会发现有一天您希望能够预加载映射,但是单例会阻碍(无法创建单例的第二个实例)。

将它们传递到构造函数中,并将它们保存在成员变量中


如果您从太多的地方访问它们,您可能会遇到设计问题。

您不应该根据数据结构进行设计。Java是一种面向对象的语言。试着把你的问题想象成物体相互作用。它不是二维数组;这是一个棋盘上的物体。将操纵其状态的行为构建到问题中,并隐藏您碰巧选择了二维数组的事实

我还没有制定出一个董事会的所有细节,但它会这样开始:

public class Board
{
    // This is what you're passing around now; Board hides it.
    // Square is the abstraction of a position on the Board
    private Square[][] grid;

    public Board(int nRows, int nCols)        
    {
       this.grid = new Square[nRows][];
       for (int i = 0; i < this.grid[i].length; ++i)
       {
           this.grid[i] = new Square[nCols];
       }
    }

    // Now add methods for adding Pieces to the Board, rules for moving them, etc.
} 
公共课程委员会
{
//这就是你们现在要传递的信息,黑板会把它隐藏起来。
//正方形是板上位置的抽象
私人广场[][]网格;
公共董事会(国际nRows、国际NCOL)
{
this.grid=new Square[nRows][];
对于(int i=0;i
我建议将其设置为静态,但创建一个确定的类来读取其中的数据,比如GridSquaresAssessor。在这个类中,您编写了访问数组的所有方法。更好的是,将其设置为此类的私有静态字段,以避免任何其他代码 以此类中未定义的方式进行操作

在每个需要访问数组的类中,都可以将一个GridSquaresAcessor作为参数传递给构造函数,并将其存储在局部变量中

我个人不喜欢单件,因为它们使测试代码变得非常困难


如果代码是多线程的,请确保2D数组同步。

请问“成员变量”是什么意思?对不起,我对java和编程还是比较陌生的。这些是每对象变量。有时它们也被称为字段。对不起,我觉得我在这里太模糊了。你能给我举个例子吗?哦,对不起,我想我现在明白了。比如int或char。与对象整数或字符串相反。这就是我的想法,只是你的措辞更好。还有人认为这是个好方法吗?很有趣。我已经为每个方块创建了一个名为GirdSquare的类。拥有一个二维网格阵列可以让我更轻松地与路径查找算法交互。即使我有一个Board对象,我仍然需要访问单独的网格方块,我认为最好的方法是使用2d数组,比如网格引用。也许,但是Board抽象会完全隐藏事实。例如,如果我为垄断者编写了一个计算机表示,那么最好将其表示为垄断者属性的LinkedList,因为您总是以这种方式遍历董事会。在这种情况下,董事会抽象仍然有用;你的2D网格不会。我不确定你这是什么意思。我不熟悉抽象和接口类的概念!也许你能给我更多的细节?电路板抽象是什么样子的?我将如何使用它?谢谢你的示例!说得更清楚了!通过这种方式,我还可以设计各种方法来保持每个级别访问网格的方式,但只需使用“更改级别”方法即可据我所知,我需要将此设置为一个单例类。我正在研究atm,但如果有人发现了一个如何做这件事并使用单例类的例子,请让我知道。哼。我可能最终会将其扩展到多个楼层。我想这种方式不适合这种情况即使你有多个楼层(基本上是从2d到3d),仍然只有一个全局游戏状态。因此,单身汉仍然有效。我将不得不仔细阅读关于单身人士以及如何使用他们。我以前没有和他们打过交道,也没有人教过我。谢谢阿加因加,有人告诉我一个好的单例模式教程吗?谷歌会阻止你创建单例:答案+将其作为单例使用!