coderkid
coderkid

Reputation: 658

Accessing arrays with methods

Hi guys i'm just starting to learn Java, and I wondering how can I access an array that was declared in a method from another method? The design look like this:

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

}

Upvotes: 1

Views: 228

Answers (4)

DonaldAnderson
DonaldAnderson

Reputation: 168

This is done thusly

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

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

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

The array declaration must not be done inside the class methods. Variable declaration done inside a method limits it's scope of a variable to the method. (i.e you can't use it anywhere else).

The array is then instantiated in a constructor. A constructor is a special function that is run when a class is instantiated. Constructor are used to instantiated a class's variables Constructors have the same name as their class and must not specify a return type (so no public int or public void just public)

Next you need to change the return type of the accessArray method. A return type of void states that the method isn't going to return anything. Change it to float[] Then your accessArray method need only return the array variable.

EDIT: The "return myArray;" line of code gives a reference to the array to what ever called the function (Not a copy of the array, the actual array, a quick of Java is that it always does this except when returning primitive data types where it returns a copy)

If you want accessArray() to set floats in the array instead of returning the array it should be implmented like this.

public void accessArray(int index, float value){
  myArray[index] = value;
}

Upvotes: 1

RandomQuestion
RandomQuestion

Reputation: 6998

Read about scope of variables in java. This is link I could find on quick Google search. http://www.java-made-easy.com/variable-scope.html

You can declare the array at class level then it is accessible in all methods.

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

Or You can pass the variables in method.

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

Given the amount of information, I have from question, approach 1 seems better than 2.

Upvotes: 3

mike
mike

Reputation: 5055

There a two options:

  • You declare that array as instance variable
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];
    }
}
  • You pass the array as parameter to the method (resp. the initializeArray method should return an array)
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];
    }
}

Upvotes: 0

free3dom
free3dom

Reputation: 18978

You need to move your declaration to make it a member, otherwise it will go out of scope once the initializeArray call ends. Then you can access the array from both methods. Try this:

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

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

   public void accessArray(){
      array[0] = 1.0f;
   }
 }

Upvotes: 1

Related Questions