有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何将二维数组合并为一维数组?

我很难想出如何将多维数组合并到单个数组中

这是我的密码:

        String[][] multiArray = {{"1","2","3"},{"4","5","6"}};
    String[] singleArray = new String[6];

    for(int i=0; i<singleArray.length; i++)
    {
        for(int x=0; x<multiArray.length; x++)
        {
            for(int z=0; z<multiArray[x].length;z++)
            {
                //for(int i=0; i<singleArray.length; i++)
                //{
                singleArray[i] = multiArray[x][z];  
                //}
            }
        }
    }


    for(String temp : singleArray){
        System.out.println(temp);
    }

结果是

6  
6  
6  
6  
6  
6  

为什么呢?如何将所有数字放入一个数组中? 非常感谢


共 (6) 个答案

  1. # 1 楼答案

    您需要为多维数组中的每个条目增加一维数组的索引:

    String[][] multiArray = {{"1","2","3"},{"4","5","6"}};
    String[] singleArray = new String[6];
    
    for (int x = 0, i = 0; x < multiArray.length; x++) {
        for (int z = 0; z < multiArray[x].length; z++) {
            singleArray[i++] = multiArray[x][z];  
        }
    }
    

    注意i在外部循环中初始化,并且在一维数组中赋值时递增

    另一个等效的替代方法是在内部循环中增加i

    for (int x = 0, i = 0; x < multiArray.length; x++) {
        for (int z = 0; z < multiArray[x].length; z++, i++) {
            singleArray[i] = multiArray[x][z];  
        }
    }
    
  2. # 2 楼答案

    你的代码不符合逻辑。在增加单个数组的索引之前,需要迭代多维数组的所有值。这就是为什么单个数组的每个项都包含多维数组的最后一项

    您应该避免在单个数组上进行排序,并使用计数器写入其值。试试这个:

    String[][] multiArray = {{"1","2","3"},{"4","5","6"}};
    String[] singleArray = new String[6];
    
    int counter=0;
    for(int x=0; x<multiArray.length; x++)
    {
        for(int z=0; z<multiArray[x].length;z++)
        {
            singleArray[counter] = multiArray[x][z]; 
            counter++: 
        }
    }
    
    
    
    for(String temp : singleArray){
        System.out.println(temp);
    }
    
  3. # 3 楼答案

    String[][] multiArray = {{"1","2","3"},{"4","5","6"}};
    String[] strings = Arrays.stream(multiArray)
            .flatMap(Arrays::stream)
            .toArray(size -> new String[size]);
    
  4. # 4 楼答案

    在代码中,您开始迭代要存储所有值的数组。您不应该开始对它进行迭代,因为它没有数据
    逻辑很简单:您应该迭代已有的元素,读取每个元素并将其添加到目标数组中
    首先是数组第一维的循环,然后是数组第二维的嵌入式循环,现在可以读取二维数组的每个数据

    String[][] multiArray = { { "1", "2", "3" }, { "4", "5", "6" } };
    String[] singleArray = new String[multiArray[0].length + multiArray[1].length];
    
    int i = 0;
    for (int j = 0; j < multiArray.length; j++) { // first dimension [j]
        for (int k = 0; k < multiArray[j].length; k++) {  // second dimension [k]
          singleArray[i] = multiArray[j][k]; // here you get [j][k] 
          i++; // you go to next position of destination array  
               // when you had an entry
        }   
    }
    
  5. # 5 楼答案

    实际上,在代码中,i的值没有改变,没有必要让i作为所有循环的父循环,在每个更新步骤之后,您必须增加i的值

      int i=0;
      while (i<singleArray.length)
       {
        for(int x=0; x<multiArray.length; x++)
        {
            for(int z=0; z<multiArray[x].length;z++)
            {
    
    
                singleArray[i++] = multiArray[x][z];  
    
            }
        }
    }
    
    
    for(String temp : singleArray){
        System.out.println(temp);
    }
    
  6. # 6 楼答案

    使用集合如何

        String[][] multiArray = {{"1","2","3"},{"4","5","6"}};
    
        List<String> result = new ArrayList<>();
        for(String[] firstLevel : multiArray){
            for(String secondLevel : firstLevel){
                result.add(secondLevel);
            }
        }
        return result.toArray();