Java定义多维数组

Java定义多维数组,java,arrays,multidimensional-array,initialization,Java,Arrays,Multidimensional Array,Initialization,我这样定义一个数组:int[]interval=newint[10][10]但是我的数组必须具有不同的维度,这取决于谁调用定义此数组的函数 我想尝试这样做:int[]interval=newint[]但它说“变量必须提供维度表达式或数组初始值设定项” 我还尝试了int[]]interval=null,但之后当我尝试并执行interval[3][4]=10时,它给出了异常 那么我如何才能做到这一点呢?在Java中创建多维数组时,必须至少指定最外层数组的维度。在本例中,如果希望所有数组的大小不同,则

我这样定义一个数组:
int[]interval=newint[10][10]但是我的数组必须具有不同的维度,这取决于谁调用定义此数组的函数

我想尝试这样做:
int[]interval=newint[]但它说“变量必须提供维度表达式或数组初始值设定项”

我还尝试了
int[]]interval=null
,但之后当我尝试并执行
interval[3][4]=10
时,它给出了异常


那么我如何才能做到这一点呢?

在Java中创建多维数组时,必须至少指定最外层数组的维度。在本例中,如果希望所有数组的大小不同,则仍需要指定所需的数组数量。例如,如果需要六个数组,可以说

int [][] intervals = new int[6][];
然后您可以这样填写:

intervals[0] = new int[137];
intervals[1] = new int[42];
/* ... */

如果您事先不知道需要多少数组,您可能需要考虑使用<代码> ARARYLISTAB/CODE >显式添加新数组。例如:

ArrayList<int[]> intervals = new ArrayList<int[]>();
intervals.add(new int[137]);
intervals.add(new int[42]);
/* ... */
ArrayList interval=new ArrayList();
增加(新整数[137]);
增加(新整数[42]);
/* ... */

希望这有帮助

试着把多维数组看作数组的数组

这与JVM内部的情况并不完全相同,但这是解决此类问题的最佳心智模型

所以,如果你有

int [][] intervals = null;
那么您的外部数组为空,以后可以使用

int size = 10;
intervals = new int[size][];
它创建了一个
int[]
数组,但在这种情况下,10个内部数组中的每一个都是空的

如果希望它们的大小相同(例如10 x 5阵列),请执行以下操作:

int size1 = 10;
int size2 = 5;
intervals = new int[size1][size2];
int size = 10;
intervals = new int[size][];
intervals[0] = new int[5];
intervals[1] = new int[4];
// etc...
List< List<Integer> > list = new ArrayList< List<Integer> >();


for(int i=0; i<10; i++) // You would loop over whatever input you're processing
{                       //  but I don't know what you're doing in that part of you code
                        //  so I'll just do it 10 times.

    List<Integer> innerList = new ArrayList< Integer >();

    innerList.add( 1 );
    innerList.add( 2 );
    innerList.add( 3 );

    // etc.

    list.add( innerList );
}
但如果您希望它们的尺寸不同,请执行以下操作:

int size1 = 10;
int size2 = 5;
intervals = new int[size1][size2];
int size = 10;
intervals = new int[size][];
intervals[0] = new int[5];
intervals[1] = new int[4];
// etc...
List< List<Integer> > list = new ArrayList< List<Integer> >();


for(int i=0; i<10; i++) // You would loop over whatever input you're processing
{                       //  but I don't know what you're doing in that part of you code
                        //  so I'll just do it 10 times.

    List<Integer> innerList = new ArrayList< Integer >();

    innerList.add( 1 );
    innerList.add( 2 );
    innerList.add( 3 );

    // etc.

    list.add( innerList );
}
但所有这些都假设在开始填充阵列之前,您知道希望阵列有多大。
如果您不知道这一点,那么您需要使用
列表
——查看
ArrayList

编辑 我刚刚在你的评论中看到后一种情况是你想要的,所以

尝试以下方法:

int size1 = 10;
int size2 = 5;
intervals = new int[size1][size2];
int size = 10;
intervals = new int[size][];
intervals[0] = new int[5];
intervals[1] = new int[4];
// etc...
List< List<Integer> > list = new ArrayList< List<Integer> >();


for(int i=0; i<10; i++) // You would loop over whatever input you're processing
{                       //  but I don't know what you're doing in that part of you code
                        //  so I'll just do it 10 times.

    List<Integer> innerList = new ArrayList< Integer >();

    innerList.add( 1 );
    innerList.add( 2 );
    innerList.add( 3 );

    // etc.

    list.add( innerList );
}
ListList=newarraylist();
对于(int i=0;i();
添加(1);
添加(2);
添加(3);
//等等。
添加(innerList);
}
或者,您可以:

  • List
    这意味着,如果您知道内部集合的长度,则将列表用于外部集合,而将数组用于内部集合
  • List[]
    它使用数组作为外部集合,使用列表作为内部集合

<>这完全取决于你的代码是如何工作的。

如果你想动态地分配数组中的元素,你可以考虑:

ArrayList>数组=新的ArrayList>();
add(新的ArrayList());
数组。获取(0)。添加(1);
数组。获取(0)。添加(2);
add(新的ArrayList());
数组。获取(1)。添加(3);

您是否要求数组在运行时动态改变大小?这是一个
列表
。要模拟二维数组,请使用
列表
,即一个包含整数列表的列表。您尝试的第一件事似乎是对的。可能您混合了数组索引以0开头?嗯,是的…类似于这样的东西…我不知道d这个数组从一开始就有扩展,所以我不想为2个元素定义一个巨大的数组。很棒的…我知道列的数目(每次都是3个),但是在这种情况下,我只会考虑它的侧面……转置或它所调用的任何东西。谢谢。我想这会有帮助。)AndreiBogdan,如果你知道外部集合是多大的话。(本例中的列)然后您可能希望使用
ArrayList[]
。这使它成为一个列表数组(其中templatetypedef的解决方案是一个数组列表)。啊哈……但我确实需要使用int[][]:),否则我会使用数组列表:)