2017-01-22 3 views
-1

Wenn ich einen 2D-Array mit unbekannten Parametern gegeben habe, habe ich die Zeilen miteinander zu verknüpfen, einen 1D-String mit den Werten zum Beispiel zu erstellen:Wie Sie einen 1D-Array aus einem 2D-Arrays erstellen

2 3 4 1 
8 1 1 2 

returns 

[2341, 8112] 

Wie konvertiert man ein 2D-Array in ein 1D-Array und legt es als String fest? Diese ist das, was ich bisher:

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

ich Fehler bekommen, die sagen, dass ich nicht von String in einen int umwandeln kann []

+0

Fehler ist ziemlich klar. Du hast 'int [] answer' erstellt und später willst du ihm 'answer =" ["+ ..." 'zuweisen, was String ist. Das ist auf vielen Ebenen falsch. Versuche zu überdenken, was du hier tust Ist das Ergebnis dieser Methode? Sollte es Array sein? Welche Art von Elementen sollte es halten? – Pshemo

+0

Brechen Sie Ihr Problem in Teile und legen Sie diese Teile in separaten Funktionen: 1. Wie verketten Sie ein 1D Array von ganzen Zahlen in eine einzige ganze Zahl ? 2. Wie wiederholst du das für jede Zeile eines 2D-Arrays, um ein Array von ganzen Zahlen zu erzeugen? –

+0

Lesen Sie auch dies: http://meta.programmers.stackexchange.com/questions/6166/open-letter-to- Schüler-mit-Hausaufgaben-Probleme? cb = 1 –

Antwort

0

Try this:

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

Dies kann mit Stream von

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

Die Idee leicht getan ist, dass jeder int[] im 2d-Array wird auf eine Zahl reduziert und dann konvertieren wir das aus einem Stream in int[].

Das Problem in Ihrer Implementierung ist, dass Sie int[] answer deklarieren und dann versuchen, eine String darin zu speichern.

+0

gibt zurück, nicht druckt ... – Pshemo

+0

Auch 'Arrays.toString' wird' 2 3 4 1' in '[2, 3, 4, 1]' nicht '2341' . – Pshemo

+0

Sie haben Recht - danke, dass Sie mich korrigiert haben. Ich habe die Antwort entsprechend aktualisiert. –

0

A Mathematical Ansatz - keine String-Manipulation beteiligt

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

hoffe, das hilft!

Verwandte Themen