1

大家好,我刚开始学习Java,我想知道如何从另一个方法访问在一个方法中声明的数组?设计如下所示:

public class Arrays{
  int arraysize = 2;

     public void initializeArray(){
    float array[] = new float[arraySize]; // Declare array  
     }

     public void accessArray(){
     // I want to access the array from this method.
     }

}

4

4 回答 4

3

阅读 java 中变量的范围。这是我可以在 Google 快速搜索中找到的链接。http://www.java-made-easy.com/variable-scope.html

您可以在类级别声明数组,然后可以在所有方法中访问它。

    public class Arrays {
    int arraysize = 2;
    private float[] array = null;

    public void initializeArray() {
        array = new float[arraySize]; // Declare array
    }

    public void accessArray() {
        // access array here.
    }
}

或者您可以在方法中传递变量。

    public class Arrays {
    int arraysize = 2;

    public void initializeArray() {
        float[] array = new float[arraySize]; // Declare array
        accessArray(array);
    }

    public void accessArray(float[] array) {
        // access array here.
    }
}

鉴于信息量,我从问题中得到,方法 1 似乎比 2 好。

于 2013-09-11T22:56:12.310 回答
1

这样就完成了

public class myClass{
  int arraysize = 2;
  float[] myArray; // Declare array

  public myClass(){
    myArray = new float[arraySize]; // initialize array 
  }

  public float[] accessArray(){
    return myArray;
  }
}

数组声明不得在类方法内完成。在方法内完成的变量声明将变量的范围限制在方法中。(即您不能在其他任何地方使用它)。

然后在构造函数中实例化该数组。构造函数是在实例化类时运行的特殊函数。构造函数用于实例化类的变量构造函数与其类具有相同的名称,并且不能指定返回类型(因此没有 public int 或 public void 只是 public)

接下来,您需要更改 accessArray 方法的返回类型。返回类型 void 表明该方法不会返回任何内容。将其更改为 float[] 然后您的 accessArray 方法只需要返回数组变量。

编辑:“返回 myArray;” 代码行提供了对曾经调用函数的数组的引用(不是数组的副本,实际的数组,Java 的快速之处在于它总是这样做,除非在返回原始数据类型时返回副本)

如果您希望 accessArray() 在数组中设置浮点数而不是返回数组,则应该像这样实现。

public void accessArray(int index, float value){
  myArray[index] = value;
}
于 2013-09-11T23:12:40.473 回答
1

您需要移动您的声明以使其成为成员,否则一旦initializeArray调用结束,它将超出范围。然后您可以从这两种方法访问数组。尝试这个:

public class Arrays{
   float[] array;
   int arraysize = 2;

   public void initializeArray(){
      array = new float[arraySize];   // Declare array  
   }

   public void accessArray(){
      array[0] = 1.0f;
   }
 }
于 2013-09-11T22:55:05.697 回答
0

有两种选择:

  • 您将该数组声明为实例变量
public class Arrays {

    private int arraySize = 2;
    private float array[];// Declare array

    public void initializeArray() {
        array = new float[arraySize];
    }

    public void accessArray() {
        // I want to access the array from this method.
        float first = array[0];
    }
}
  • 您将数组作为参数传递给方法(相应的initializeArray方法应该返回一个数组)
public class Arrays {

    public static void main(String[] args) {
        int arraySize = 2;
        float[] array = initializeArray(arraySize);
        accessArray(array);
    }

    public static float[] initializeArray(int size) {
        return new float[size];
    }

    public static void accessArray(float[] floats) {
        // I want to access the array from this method.
        float first = floats[0];
    }
}
于 2013-09-11T22:52:38.030 回答