簡體   English   中英

如何在Java中將一維數組轉換為二維數組

[英]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.

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