2017-01-22 4 views
-1

Если я дал 2D массив с неизвестными параметрами, я должен объединить строки вместе, чтобы создать 1D строку с этими значениями, например:Как вы создаете 1D массив из заданного 2D массива

2 3 4 1 
8 1 1 2 

returns 

[2341, 8112] 

Как вы преобразовываете 2D-массив в 1D-массив и устанавливаете его как строку? Это то, что я до сих пор:

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 + "]"; 
    } 

я получаю ошибки, которые говорят, что я не могу конвертировать из строки в межд []

+0

Ошибка довольно ясна. Вы создали 'int [] answer', а позже вы хотите назначить ему' answer = "[" + ... "' который является строкой. Это неверно на многих уровнях. Попробуйте переосмыслить, что вы здесь делаете. быть фактическим результатом этого метода? Должен ли он быть массивом? Какие типы элементов он должен содержать? – Pshemo

+0

Разделите проблему на части и поместите эти части в отдельные функции: 1. Как вы объединяете 1D массив целых чисел в одно целое число ? 2. Как вы повторяете это для каждой строки двумерного массива для создания массива целых чисел? –

+0

Также прочтите следующее: http://meta.programmers.stackexchange.com/questions/6166/open-letter-to- ученики с домашней задачей? cb = 1 –

ответ

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; 
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(); 

идея заключается в том, что каждый int[] в массиве 2d сводится к числу, а затем мы преобразуем его из потока в int[].

Проблема в вашей реализации заключается в том, что вы объявляете int[] answer, а затем пытаетесь сохранить в ней String.

+0

возвращает, а не распечатывает ... – Pshemo

+0

Также 'Arrays.toString' изменит' 2 3 4 1' на '[2, 3, 4, 1]' not '2341' – Pshemo

+0

Вы правы - спасибо за исправление меня. Я обновил ответ соответствующим образом. –

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

Надежда это помогает!

Смежные вопросы