在方法中设置值数组

时间:2013-09-27 14:07:57

标签: java

我必须制作一个数组。不幸的是我无法解决问题。我的问题: 我想制作一个数组(二维)并在方法中声明数组的大小。但是,这是我真正的问题,我想在其他方法中使用该数组。

我试图在类本身中创建一个数组但是它已经被声明了,我不能再改变它了。

这是事情:我需要一个我可以自己设置的数组。之后我想要另一种可以计算数组内容的方法。我还需要另一种方法来在该数组中执行其他操作。

所以我的问题是:如何声明一个数组并在其他方法中使用它? 我的代码在底部。

希望你的解释能够让你们帮助我。

public class Operations
{

    public final int SET = 1;
    int rows;
    int cols;
    int objects;
    int times;
    int doubles = 0;
    int empty = 0;
    int world[][] = new int[rows][cols];

    public void print()
    {
        System.out.println(rows);
        System.out.println(cols);
        System.out.println(objects);
        System.out.println(times);
    }

    public void setParameters(int rows, int cols, int objects, int times)
    {
        this.rows = rows;
        this.cols = cols;
        this.objects = objects;
        this.times = times;
    }

    public void addObjects()
    {

        Random random = new Random();

        for (int i = 0; i < objects; i++)
        {
            int randomx = random.nextInt(rows);
            int randomy = random.nextInt(cols);

            world[randomx][randomy] += SET;
        }

    }

}

3 个答案:

答案 0 :(得分:2)

您应该创建一个构造函数,而不是使用setParameters方法。你可以像这样构造构造函数:

public Operations(int rows, int cols, int objects, int times)
{
    this.rows = rows;
    this.cols = cols;
    this.objects = objects;
    this.times = times;
    world = new int[rows][cols];
}

字段int world[][]现在将在构造函数中初始化。 这样,您可以在其他方法中同时声明一个数组和它的大小。要在另一个方法中初始化对象,您可以说:

Operations array = new Operations(num_rows, num_cols, num_objects, num_times);

答案 1 :(得分:2)

  

我试图在类本身中创建一个数组但是它已经被声明了,我不能再改变它了。 (...)如何声明数组并在其他方法中使用它?

如果我正确地理解了你的问题,你想在类范围内声明一个数组,并通过一个方法初始化/变异...这样其他方法就可以使用该数组了。

public class Operations
{
   // declare the array
   private int[][] world;

   public void setParameters(int rows, int cols, int objects, int times)
   {
      this.rows = rows;
      this.cols = cols;
      this.objects = objects;
      this.times = times;
      // initialize the array
      world = new int[rows][cols];
   }

   /// .... methods that use the array
}

如果您不想允许对阵列进行新的初始化(同时仍能够更改其值),请关注@fvrghl advice并提供构造函数。同时制作数组final,使其只能初始化一次。

public class Operations
{
   // declare the array, note the final keyword
   private final int[][] world;

   public Operations(int rows, int cols, int objects, int times)
   {
      this.rows = rows;
      this.cols = cols;
      this.objects = objects;
      this.times = times;
      world = new int[rows][cols]; 
      // array is initialized, its dimensions are now fixed.
   }

   /// .... methods that use the array

}

答案 2 :(得分:0)

如果数组大小是动态的,请不要在此初始化数组。

int world[][] = null;   

使用setParameters方法

初始化数组
public void setParameters(int rows, int cols, int objects, int times)
{
    this.rows = rows;
    this.cols = cols;
    this.objects = objects;
    this.times = times;
    world = new int[rows][cols]; //You need to initialize the array here
}