Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 调用全局数组_Java_Arrays_Global Variables - Fatal编程技术网

Java 调用全局数组

Java 调用全局数组,java,arrays,global-variables,Java,Arrays,Global Variables,我目前正在尝试使用2D阵列绘制形状。在我的类中,有一个使用公共字符画布[]定义的全局数组 到目前为止,我只声明了具有char canvas[][]=new char[height][width]的数组 如果已经声明了这个数组,并且我不应该修改已经给出的代码,那么如何调用该数组的实例以便使用它呢 谢谢 编辑 对你的要求有点困惑 您始终可以在任何时候重新声明全局数组,并根据自己的需要使用它…但这似乎有点可疑…为什么这是一个全局数组 看起来你的画布不应该改变大小…但我对你的情况不太了解 检查数组是否为

我目前正在尝试使用2D阵列绘制形状。在我的类中,有一个使用公共字符画布[]定义的全局数组

到目前为止,我只声明了具有char canvas[][]=new char[height][width]的数组

如果已经声明了这个数组,并且我不应该修改已经给出的代码,那么如何调用该数组的实例以便使用它呢

谢谢

编辑


对你的要求有点困惑

您始终可以在任何时候重新声明全局数组,并根据自己的需要使用它…但这似乎有点可疑…为什么这是一个全局数组

看起来你的画布不应该改变大小…但我对你的情况不太了解


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

对您的要求有点困惑

您始终可以在任何时候重新声明全局数组,并根据自己的需要使用它…但这似乎有点可疑…为什么这是一个全局数组

看起来你的画布不应该改变大小…但我对你的情况不太了解


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

我不确定您的问题是否正确

但是看起来您需要一个单例模式,而不是将char canvas[][]声明为公共字段,而是将canvas数组封装为只读属性

public class MyDrawing 
{

private char canvas[][] = null;

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

当您需要画布数组而不是以前使用的画布公共变量时,请在代码的其他部分使用getCanvas

我不确定你的问题是否正确

但是看起来您需要一个单例模式,而不是将char canvas[][]声明为公共字段,而是将canvas数组封装为只读属性

public class MyDrawing 
{

private char canvas[][] = null;

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

当您需要画布数组而不是以前使用的画布公共变量时,请在代码的其他部分使用getCanvas

静态方法和实例变量之间存在不兼容

这样考虑:实例变量与类的特定实例相关联;静态变量与类本身相关联。通过类调用静态方法:

ClassI.callStaticMethod();
public ClassI classObj = new ClassI();
classObj.callInstanceMethod();
而您通过类的实例调用实例方法:

ClassI.callStaticMethod();
public ClassI classObj = new ClassI();
classObj.callInstanceMethod();
在您发布的代码中,静态方法main中设置了一个实例变量canvas,它与类而不是实例相关联

因此,您需要创建实例方法来修改/更新画布,并在静态函数中创建类的实例。此对象是一个实例,可用于更新实例变量

下面是一个例子:

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;
    }
}

这显然与您的赋值不存在一对一的相关性,但我相信您将能够使其适应您所做的工作:-

静态方法和实例变量之间存在不兼容

这样考虑:实例变量与类的特定实例相关联;静态变量与类本身相关联。通过类调用静态方法:

ClassI.callStaticMethod();
public ClassI classObj = new ClassI();
classObj.callInstanceMethod();
而您通过类的实例调用实例方法:

ClassI.callStaticMethod();
public ClassI classObj = new ClassI();
classObj.callInstanceMethod();
在您发布的代码中,静态方法main中设置了一个实例变量canvas,它与类而不是实例相关联

因此,您需要创建实例方法来修改/更新画布,并在静态函数中创建类的实例。此对象是一个实例,可用于更新实例变量

下面是一个例子:

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;
    }
}
这显然与您的作业没有一对一的关系,但我相信您能够根据您的工作进行调整:-

您的问题是makeNewCanvasint tmpWidth,int tmpHeight是静态的,或者public char canvas[][]不是静态的

在Java中,静态类成员只能与其他静态类成员一起工作。静态成员属于类,非静态成员属于实例。类是用于创建对象的模板,这些对象称为类的实例。当您声明某个静态对象时,它将由类的所有实例共享。对于方法,这意味着静态方法在所有实例上的行为必须完全相同

DrawingSystem a = new DrawingSystem();
DrawingSystem b = new DrawingSystem();
a和b是类DrawingSystem的实例,这意味着它们各自有自己的画布数组。现在,由于makeNewCanvas是静态的,并且所有实例的行为都必须相同,因此不能使用a.canvas或b.canvas,因为它们对于a和b是唯一的,并且可以具有不同的内容。

您的问题是makeNewCanvasint tmpWidth、int tmpHeight是静态的,或者public char canvas[]不是静态的

在Java中,静态类成员只能与其他静态类成员一起工作。静态成员属于类,非静态成员属于实例。该类是一个模板,它是u 要创建对象,这些对象称为类的实例。当您声明某个静态对象时,它将由类的所有实例共享。对于方法,这意味着静态方法在所有实例上的行为必须完全相同

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


a和b是类DrawingSystem的实例,这意味着它们各自有自己的画布数组。现在,由于makeNewCanvas是静态的,并且所有实例的行为都必须相同,因此不能使用a.canvas或b.canvas,因为它们对于a和b是唯一的,并且可以有不同的内容。

您好,谢谢您的回复。画布是全局的原因是它可以被类中的所有方法修改。第一种方法定义它,第二种方法在其中画一个正方形,第三种方法打印它。数组画布已经在类中定义为公共数组,我只是在方法中调用它时遇到问题,好像我只是使用canvas=new char[tmpHeight][tmpWidth];在这个方法中,我得到了一个错误:当试图编译时,静态变量canvas不能从静态上下文引用。嗨,谢谢你的回复。画布是全局的原因是它可以被类中的所有方法修改。第一种方法定义它,第二种方法在其中画一个正方形,第三种方法打印它。数组画布已经在类中定义为公共数组,我只是在方法中调用它时遇到问题,好像我只是使用canvas=new char[tmpHeight][tmpWidth];在方法内部,我得到了一个错误,当试图编译时,静态变量canvas不能从静态上下文引用。你能再发布一点代码吗?这是家庭作业吗?如果是的话,你会这样标记吗?我已经添加了基本代码。如前所述,我只是尝试在MakeNewCanvas方法中调用数组画布。Canvas需要作为一个公共数组,因为我需要在DrawingSystem的其他方法中使用和编辑它。您没有问过它,但是公共静态变量并不是一个好的设计示例。如果你继续这样编码,你以后会遇到各种各样的问题。你能再发一点代码吗?这是家庭作业吗?如果是的话,你会这样标记吗?我已经添加了基本代码。如前所述,我只是尝试在MakeNewCanvas方法中调用数组画布。Canvas需要作为一个公共数组,因为我需要在DrawingSystem的其他方法中使用和编辑它。您没有问过它,但是公共静态变量并不是一个好的设计示例。如果你继续这样编码,你以后会遇到各种各样的问题。谢谢贝德维尔。在我发布的示例中,我的类被另一个类世界中的Main方法引用。这段代码是提供的,所以我要做的就是在被调用的类中创建方法,即DrawingObect中的方法。但我意识到它是什么。到目前为止,我只在一个类中工作,所以总是使用static来定义我的方法,但是由于类DrawingSystem不是公共的,所以在定义方法时不应该包含static。是这样吗?我从方法名中删除了static,现在它符合要求。你是对的。“static”关键字仅在您不希望使用类的实例(例如获取输入并提供输出的实用程序方法)来维护状态时使用-请参见Math.abs。在您的特定情况下,static不能与您正在使用的实例变量一起使用。干得好但由于课堂绘图系统不是公共的。。。这与绘图系统是否公开无关。关于使用static的问题适用于公共类和非公共类。谢谢bedwyr。在我发布的示例中,我的类被另一个类世界中的Main方法引用。这段代码是提供的,所以我要做的就是在被调用的类中创建方法,即DrawingObect中的方法。但我意识到它是什么。到目前为止,我只在一个类中工作,所以总是使用static来定义我的方法,但是由于类DrawingSystem不是公共的,所以在定义方法时不应该包含static。是这样吗?我从方法名中删除了static,现在它符合要求。你是对的。“static”关键字仅在您不希望使用类的实例(例如获取输入并提供输出的实用程序方法)来维护状态时使用-请参见Math.abs。在您的特定情况下,static不能与您正在使用的实例变量一起使用。干得好但由于课堂绘图系统不是公共的。。。这与绘图系统是否公开无关。关于使用静态的问题适用于公共类和非公共类。谢谢纳什,是的,在贝德维尔发布他的答案后,我意识到出了什么问题。正如我前面提到的,到目前为止,我只在一个类中工作过,所以这是我第一次在Java中使用对象,因此仍然调用静态方法。。。但现在我明白了!再次感谢。没问题,新事物也没什么错!谢谢,纳什,是的,我意识到了什么
在贝德维尔发布他的答案后,他出了问题。正如我前面提到的,到目前为止,我只在一个类中工作过,所以这是我第一次在Java中使用对象,因此仍然调用静态方法。。。但现在我明白了!再次感谢。没问题,新事物也没什么错!