从方法(Java)调用到main中的数组的声明

从方法(Java)调用到main中的数组的声明,java,arrays,Java,Arrays,我对java相当陌生,我认为我的程序存在一个简单的问题 对于方法arrayTest2,由于编译时出错,我无法将其导入main: "Cannot find symbol, symbol: variable dataStorage". 我也尝试过以下声明: arrayTest2(dataStorage[][]) 及 但它们不起作用 任何帮助都将不胜感激 干杯 import io.*; public class TrialArray { public static void ma

我对java相当陌生,我认为我的程序存在一个简单的问题

对于方法
arrayTest2
,由于编译时出错,我无法将其导入main:

"Cannot find symbol, symbol: variable dataStorage".
我也尝试过以下声明:

arrayTest2(dataStorage[][])    

但它们不起作用

任何帮助都将不胜感激

干杯

import io.*;

public class TrialArray
{
    public static void main(String [] args)
    {
        arrayTest();
        arrayTest2(dataStorage);
    }

    public static void arrayTest()
    {
        int[][] dataStorage = new int[5][5];

        dataStorage[1][2] = 1;

        System.out.printf("THIS PART WORKS");
    }

    public static void arrayTest2(int[][] dataStorage)
    {
        dataStorage[2][2] = 3;

        System.out.printf("THIS DOESNT");
    }

}

您试图将
dataStorage
传递给
arrayTest
-函数,但
dataStorage
不是类的字段,也不是
main
的局部变量(aka
dataStorage
main
中不存在)

publicstaticvoidmain(字符串[]args){
arrayTest();

arrayTest2(数据存储);//您不能访问在其他方法中声明的变量

要使其工作,您必须执行以下操作:

public class TrialArray
{
    int[][] dataStorage;

    public static void main(String [] args)
    {
        dataStorage = new int[5][5];
        arrayTest();
        arrayTest2(dataStorage);
    }

    public static void arrayTest()
    {

        dataStorage[1][2] = 1;

        System.out.printf("THIS PART WORKS");
    }

    public static void arrayTest2(int[][] dataStorage)
    {
        dataStorage[2][2] = 3;

        System.out.printf("THIS DOESNT");
    }
} 

这里的问题是作用域:在一个函数中定义的某些内容在另一个函数中是不可见的。要解决这个问题,通常要做的是返回该值。类似于以下内容:

import io.*;

public class TrialArray
{
    public static void main(String [] args)
    {
        int[][] dataStorage = arrayTest();
        arrayTest2(dataStorage);
    }

    public static int[][] arrayTest()
    {
        int[][] dataStorage = new int[5][5];

        dataStorage[1][2] = 1;

        System.out.printf("THIS PART WORKS");

        return dataStorage;
    }

    public static void arrayTest2(int[][] dataStorage)
    {
        dataStorage[2][2] = 3;

        System.out.printf("THIS DOESNT");
    }

}
或者,您可以将
数据存储
字段作为全局变量,但这可能会非常混乱

public class TrialArray
{
    private static int[][] dataStorage;

    // ...

    public static void arrayTest() {
        dataStorage = new int[5][5];

        dataStorage[1][2] = 1;

        System.out.printf("THIS PART WORKS");
    }

    // ...
}
在这条线上

arrayTest2(dataStorage);    
您正在将参数传递给方法,该方法有一个参数“dataStorage”,但您并没有声明它

public class TrialArray
{
    private static int[][] dataStorage;

    // ...

    public static void arrayTest() {
        dataStorage = new int[5][5];

        dataStorage[1][2] = 1;

        System.out.printf("THIS PART WORKS");
    }

    // ...
}
arrayTest2(dataStorage);