[英]How to convert a one-dimensional array to two-dimensional array in Java
我想讀取一個矩陣形式的文件,所以我嘗試讀取一個文件放入String arraylist中,然后轉換為整數數組。 現在,我需要一個2D整數數組。 有人可以幫忙嗎? 有沒有更好的方法可以做到這一點。
public class readMat {
private static ArrayList<String> list = new ArrayList<String>();
public static void main (String[] args)
{
// read file and put in arraylist
try
{
Scanner s = new Scanner(new File("link_info_test.txt"));
while (s.hasNext())
{
list.add(s.next());
}
}
catch (Exception e)
{
e.printStackTrace();
}
String[] stockArr = new String[list.size()];
stockArr = list.toArray(stockArr);
int[] sum= Convert(stockArr);
}
// convert string arraylist to integer 1 dimensional array private static int[] Convert(String[] stockArr)
{
if (list != null)
{
int intarray[] = new int[stockArr.length];
for (int i = 0; i < stockArr.length; i++)
{
intarray[i] = Integer.parseInt(stockArr[i]);
}
return intarray;
}
return null;
}
}
下線后
int[] sum= Convert(stockArr);
您將整個文件放在一維整數數組中。 此時,您必須確定2D陣列的寬度和高度。
假設您希望2D數組具有3行4列作為示例。 做這個:
int[][] int_table = new int[3][4];
for(int j = 0; j < 3; j++)
{
for(int i = 0; i < 4; i++)
{
int_table[j][i] = sum[j * 4 + i];
}
}
我在sum的索引內使用的方程是一個從1D坐標到2D坐標的轉換函數。 從j和i都等於0開始,sum [j * 4 + i] = sum [0 * 4 + 0] = sum [0]。 變量i在下一步將增加1,我們將得到sum [0 * 4 + 1] = sum [1]。 在該行的末尾,我將重置為0,而j將遞增1。這時,我們將獲得sum [1 * 4 + 0] = sum [4],即sum的第五個元素。 如果您將前四個元素視為第一行的元素,這是有道理的。 現在我們進入了新的一行,我們可以用下四個填充它。 我一直提到的“四個”是我們在聲明2D數組時定義的行的寬度。
請記住,二維數組的寬度和高度不能相乘,以大於一維數組中的整數總數。 如果您嘗試讀取超出該大小的內容,則會得到IndexOutOfBoundsException。
假設您有10周中每周的每一天的溫度數據(即70條數據)。 您想將其轉換為二維數組,其中行表示星期,列表示天。 干得好:
int temp[70] = {45, 43, 54, ........}
int twoD[30][7]
for(int i=0; i < 70; i++) {
twoD[i / 7][i % 7] = temp[i]
}
而已。
假設String數組的每個條目都包含一些整數,並用一些定界符(逗號,點,連字符等)分隔,則可以使用String.split()方法。 例如,如果定界符是逗號,那么您將執行以下操作:
String Integer1;
String Integer2;
String[] TotalString;
TotalString = stockArr[i].Split(",");
Integer1 = TotalString[0];
Integer2 = TotalString[1];
然后,只需將字符串解析為整數並將它們放入您的數組即可。
如果我理解正確,您的問題是要將一維數組轉換為二維數組...可以使用以下方法
public static int[][] convertArrayTo2DArray(final int[] _1darray) {
int[][] _2dArray = null;
int size = _1darray.length / 2;
if (_1darray.length % 2 == 0) {
_2dArray = new int[2][size];
} else {
_2dArray = new int[3][size];
}
int index = 0;
outter: for (int i = 0; i < _2dArray.length; i++) {
for (int j = 0; j < _2dArray[i].length; j++) {
if (index == _1darray.length) {
break outter;
}
_2dArray[i][j] = _1darray[index];
index++;
}
}
return _2dArray;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.