簡體   English   中英

Java定義多維數組

[英]Java defining multidimensional array

我正在這樣定義一個數組: int [][] intervals = new int[10][10]; 但是我的數組必須具有不同的尺寸,具體取決於誰調用定義此數組的函數。

我想嘗試做這樣的事情: int [][] intervals = new int[][]; 但它說“變量必須提供維表達式或數組初始化器”

我也嘗試過int [][] intervals = null ,但是之后,當我嘗試執行intervals[3][4] = 10它給出了異常;

那我該怎么做呢?

在Java中創建多維數組時,必須至少指定最外層數組的維數。 在您的情況下,如果希望所有陣列的大小都不同,則仍然需要指定您需要多少個陣列。 例如,如果您需要六個數組,您可以說

int [][] intervals = new int[6][];

然后,您可以像這樣填寫它們:

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

如果您事先不知道需要多少個數組,則可能需要考慮使用ArrayList<int[]>顯式添加新數組。 例如:

ArrayList<int[]> intervals = new ArrayList<int[]>();
intervals.add(new int[137]);
intervals.add(new int[42]);
/* ... */

希望這可以幫助!

嘗試將多維數組視為數組數組

這與JVM內部的情況並不完全相同,但這是解決此類問題的最佳心理模型。

所以,如果你有

int [][] intervals = null;

那么您的外部數組為null,以后可以使用初始化

int size = 10;
intervals = new int[size][];

這將創建一個int[]數組,但在這種情況下,10個內部數組中的每一個都是null。

如果希望它們的大小都相同(例如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 -看一下ArrayList

編輯我剛剛在您的評論中看到了后一種情況就是您想要的,所以...

嘗試類似:

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

或者,您可以擁有:

  • List< int[] > ,這意味着對外部集合使用List,對內部集合使用數組,如果您知道內部集合將要使用多長時間。
  • List<Integer>[] ,它對外部集合使用數組,對內部集合使用列表。

這實際上取決於您的代碼需要如何工作。

如果要動態分配數組中的元素,則應考慮ArrayList

ArrayList< ArrayList< int > > array = new ArrayList< ArrayList< int > >();
array.add( new ArrayList< int >() );
array.get( 0 ).add( 1 );
array.get( 0 ).add( 2 );
array.add( new ArrayList< int >() );
array.get( 1 ).add( 3 );

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM