如何从给定的2D阵列创建一维数组

时间:2017-01-22 18:13:28

标签: java arrays

如果我给出了一个带有未知参数的2D数组,我必须将这些行组合在一起以创建一个带有这些值的字符串,例如:

2 3 4 1
8 1 1 2  

returns  

[2341, 8112]

如何将2D数组转换为1D数组并将其设置为String? 这就是我到目前为止所做的:

public static String[] stichEachRow(int[][] matrix)
  {
    int[] answer = new int[1];
    for (int r = 0; r < matrix.length; r++)
    {
      for (int c = 0; c < matrix[0].length; c++)
      {
        answer = "[" + matrix[r][c] + ", ";
      }
    }
    return answer + "]";
  }

我得到错误,说我无法从String转换为int []

3 个答案:

答案 0 :(得分:0)

试试这个:

    String[] sarr = new String[matrix.length];
    for (int n = 0; n < matrix.length; n++) {
        int[] arr = matrix[n];
        StringBuilder sb = new StringBuilder();
        for (int i : arr) {
            sb.append(i);
        }
        sarr[n] = sb.toString();
    }
    return sarr;

答案 1 :(得分:0)

这可以通过

使用Stream轻松完成
    Stream<Integer> str = Arrays.stream(arr)
                                .map(a -> IntStream.of(a)
                                                   .reduce(0, (r,v)-> r*10 + v));
    int[] res = str.mapToInt(i->i).toArray();

我们的想法是将2d数组中的每个int[]缩减为一个数字,然后将其从流转换为int[]

您的实施中的问题是您声明int[] answer,然后尝试在其中存储String

答案 2 :(得分:0)

数学方法 - 不涉及字符串操作

    // Our initial array
    int[][] arr = {{4,1,8,4},{1,2,3,4}};

    // Array to store results
    int[] result = new int[arr.length];

    // Iterate through array
    for (int i = 0; i < arr.length; i++){

        // Determine multiplier for first number
        double multiplier = Math.pow(10, arr[i].length-1);

        // Iteratate through 2d array
        for (int j : arr[i]){

            // add the result of the multiplier times the number in array of interest
            result[i] += (j * multiplier);

            // divide the multiplier by 10
            multiplier = multiplier / 10;
        }       
    }

希望这有帮助!