【问题标题】:How to convert a one-dimensional array to two-dimensional array in JavaJava中如何将一维数组转换为二维数组
【发布时间】:2015-07-13 15:09:03
【问题描述】:

我想读取一个矩阵形式的文件,所以我尝试读取一个文件,将其放入字符串数组列表中,然后转换为整数数组。现在我需要一个二维整数数组。任何人都可以帮忙吗?有没有更好的方法来做到这一点。

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

     }

【问题讨论】:

标签: java arrays


【解决方案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】:

    行后

    int[] sum= Convert(stockArr); 
    

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

    假设您希望二维数组具有 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]。在行的末尾,i 将重置为 0,j 将增加 1。此时,我们将有 sum[1 * 4 + 0] = sum[4],或 sum 的第五个元素。如果您将前四个元素视为第一行的元素,这是有道理的。现在我们在一个新行上,我们可以用接下来的四个来填充它。我一直提到的“四”是我们之前在声明 2D 数组时定义的行的宽度。

    请记住,二维数组的宽度和高度相乘不能大于一维数组中的整数总数。如果您尝试读取超出该大小的内容,您将收到 IndexOutOfBoundsException。

    【讨论】:

    • 非常感谢我得到了答案
    【解决方案3】:

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

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

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

    【讨论】:

      【解决方案4】:

      如果我理解,你的问题是正确的,你想将一维数组转换为二维数组......你可以使用以下方法

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

      【讨论】:

        猜你喜欢
        • 2011-07-05
        • 2015-07-16
        • 1970-01-01
        • 2016-02-18
        • 2018-02-19
        • 1970-01-01
        相关资源
        最近更新 更多