如何在Java中将一维数组转换为二维数组

时间:2015-07-13 15:09:03

标签: java arrays

我想读取一个矩阵形式的文件,所以我尝试读取一个文件,将其放在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;
         }

     }

4 个答案:

答案 0 :(得分:1)

行后

unsigned int decrement(unsigned int value)
{
    for(value; value > 0; value--)
    {
       printf("loop value %u\n",value);
    }
    return value;

您将整个文件放在一维整数数组中。此时,您必须确定2D阵列的宽度和高度。

假设您希望2D数组有3行4列作为示例。这样做:

int[] sum= Convert(stockArr); 

在和索引中使用的等式I是从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的第五个元素。如果将前四个元素视为第一行的元素,则这是有意义的。既然我们已经进入了新的行,我们可以用接下来的四行填充它。 &#34;四&#34;我提到的是我们在声明2D数组时先前定义的行的宽度。

请记住,2D阵列的宽度和高度不能相乘,以便大于1D阵列中的整数总数。如果您尝试超出该大小,您将获得IndexOutOfBoundsException。

答案 1 :(得分:1)

我们假设您有一周中每天的温度数据,为期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]
}

那就是它。

答案 2 :(得分:0)

假设您的String数组的每个条目都包含一些整数,由一些分隔符(逗号,点,连字符等)分隔,那么您可以使用String.split()方法。例如,如果您的分隔符是逗号,那么您将执行以下操作:

String Integer1;
String Integer2;
String[] TotalString;
TotalString = stockArr[i].Split(",");
Integer1 = TotalString[0];
Integer2 = TotalString[1];

然后只需将字符串解析为整数并将它们放入数组中。

答案 3 :(得分:0)

如果我理解,你的问题正确你要将1D数组转换为2D数组...你可以使用以下方法

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