0

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

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

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

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

希望它的解释足以让你们帮助我。

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

    }

}
4

3 回答 3

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);
于 2013-09-27T14:12:52.983 回答
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 的建议并提供构造函数。还要制作你的数组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

}

于 2013-09-27T14:16:08.367 回答
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
}
于 2013-09-27T14:17:25.210 回答