目前,我正在试图绘制形状与二维数组。在我的类存在与public char canvas[][];定义的全局阵列

截至目前为止,我只声明与char canvas[][] = new char[height][width];阵列

如果此阵已经宣布,和我不应该修改我一直在考虑的代码,我怎么调用数组的一个实例,这样我可以用它?

感谢。

(编辑)

class DrawingSystem {

    public char canvas[][];

       public static void makeNewCanvas(int tmpWidth, int tmpHeight) {

        canvas[][] = new char[tmpHeight][tmpWidth];

        for (int row=0; row<tmpHeight; row++) {
            for (int col=0; col<tmpWidth; col++) {
                canvas[row][col] = ' ';
            }
        }       
    }
有帮助吗?

解决方案

您有静态方法和实例变量之间的不兼容。

想一想这种方式:一个类的一个实例变量与特定的实例相关联;一个静态变量与本身相关联。你叫通过类的静态方法:

ClassI.callStaticMethod();

尽管你通过类的实例调用实例方法:

public ClassI classObj = new ClassI();
classObj.callInstanceMethod();

在您发布的代码,有(“画布”)在静态方法中被置位(main与类,不是一个实例相关联)。实例变量

因此,你需要创建实例的方法来修改/更新你的“画布”,和静态函数中创建类的实例。这个对象(一个“实例”)可被用于更新的实例变量。

下面是一个例子:

public class Foo {
    public char canvas[][];

    public static void main(String[] args) {
        Foo fooObj = new Foo(); //creates an instance of this class
        fooObj.createCanvas(2, 2);
        fooObj.modifyCanvas(0, 0, 'c');
    }

    public void createCanvas(int x, int y) {
        canvas = new char[x][y];
    }
    public void modifyCanvas(int x, int y, char c) {
        canvas[x][y] = c;
    }
}

这显然不是一个对一个关联到你的任务,但我敢肯定,你就可以使其适应你在做什么: - )

其他提示

您的问题是,makeNewCanvas(int tmpWidth, int tmpHeight)是静态的或public char canvas[][]不是一成不变的。

在Java静态类成员只能与其它静态类成员的工作。静态成员属于类和非静态成员属于实例。类是用来创建对象的模板,这些对象被称为类的实例。当你声明静态的东西它是由类的所有实例共享。在方法的情况下,这意味着,静态方法必须表现在所有实例完全相同。

DrawingSystem a = new DrawingSystem();
DrawingSystem b = new DrawingSystem();

a b是类DrawingSystem这意味着它们各自具有它们自己canvas阵列的实例。现在既然makeNewCanvas是静态的,并且必须具有相同的行为,因为他们是唯一的a.canvasb.canvas,可以有不同的内容,它不能使用ab所有实例。

我不知道如果我得到你的问题吧,

但是,看起来像您需要一个Singleton模式,而不是宣布char canvas[][]作为公共字段,封装画布阵列如只读属性

public class MyDrawing 
{

private char canvas[][] = null;

public char[][] getCanvas()
{
   if (canvas!=null)
   {
      canvas =new char[height][width];
   }
   return canvas;
}

当在代码的其他部分使用getCanvas()当你需要画布阵列的代替先前使用的帆布公共变量。

有点儿困惑,你问什么。

您可以随时重新声明在任何时候全局数组,并使用它自己的需要......但似乎有些怀疑(意为......为什么会变成这样一个全球性的阵列)。

这似乎是你的画布应该不会改变大小...但不是再次,我不十分了解你的情况。

检查是否数组为空,如果是这样声明它是你想要的大小,并愉快地使用它吗?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top