2012-01-20 23 views
5

Ecco il codice che ho finora:Convert una matrice 2D in un array 1D

public static int mode(int[][] arr) { 
     ArrayList<Integer> list = new ArrayList<Integer>(); 
     int temp = 0; 
     for(int i = 0; i < arr.length; i ++) { 
      for(int s = 0; s < arr.length; s ++) { 
       temp = arr[i][s]; 

mi sembra di essere bloccato, a questo punto su come ottenere [i][s] in un singolo array bidimensionale. Quando faccio un print(temp) tutti gli elementi del mio array 2D vengono stampati uno alla volta in ordine ma non riesco a capire come ottenerli nell'array 1D. Sono un novizio :(

Come convertire una matrice 2D in un array 1D?

La matrice 2D corrente sto lavorando è un 3x3. Sto cercando di trovare il modo matematico di tutti i numeri interi in . la matrice 2D se questo sfondo è di qualche importanza

+2

Ho modificato la domanda in modo che fosse coerente 2D-> 1D. Si prega di prestare maggiore attenzione con tali dettagli in futuro, sono importanti. –

risposta

7

Hai quasi capito bene Solo un piccolo cambiamento:.

public static int mode(int[][] arr) { 
    List<Integer> list = new ArrayList<Integer>(); 
    for (int i = 0; i < arr.length; i++) { 
     // tiny change 1: proper dimensions 
     for (int j = 0; j < arr[i].length; j++) { 
      // tiny change 2: actually store the values 
      list.add(arr[i][j]); 
     } 
    } 

    // now you need to find a mode in the list. 

    // tiny change 3, if you definitely need an array 
    int[] vector = new int[list.size()]; 
    for (int i = 0; i < vector.length; i++) { 
     vector[i] = list.get(i); 
    } 
} 
+0

grazie mille Ho battuto la testa contro il muro su questo per un bel po 'ora ha-ha. – Kristopher

+0

@KristopherSperlik welcome :) it_answers_ la tua domanda, prendi in considerazione l'accettazione - http://meta.stackexchange.com/a/5235/170914 – alf

3

modifica:

for(int i = 0; i < arr.length; i ++) { 
      for(int s = 0; s < arr[i].length; s ++) { 
       temp = arr[i][s]; 
+0

questo è un passaggio, giusto. – alf

2

Non sono sicuro se si sta tentando di convertire il proprio array 2D in un array 1D (come indica la domanda), o di inserire i valori dal proprio array 2D nell'ArrayList di cui si dispone. Prenderò per scontato il primo, ma dirò velocemente che tutto ciò che devi fare per quest'ultimo è chiamare lo list.add(temp), anche se lo temp non è effettivamente necessario nel tuo codice corrente.

Se stai cercando di avere una matrice 1D, quindi il seguente codice dovrebbe essere sufficiente:

public static int mode(int[][] arr) 
{ 
    int[] oneDArray = new int[arr.length * arr.length]; 
    for(int i = 0; i < arr.length; i ++) 
    { 
    for(int s = 0; s < arr.length; s ++) 
    { 
     oneDArray[(i * arr.length) + s] = arr[i][s]; 
    } 
    } 
} 
+0

funziona solo per array quadrati. – alf

+1

Questo è vero - ho fatto questa ipotesi perché quell'ipotesi era nel codice originale - forse avrei dovuto chiarirlo. –

3

"Come convertire una matrice 2D in un array 1D?"

 String[][] my2Darr = .....(something)...... 
     List<String> list = new ArrayList<>(); 
     for(int i = 0; i < my2Darr.length; i++) { 
      list.addAll(Arrays.asList(my2Darr[i])); // java.util.Arrays 
     } 
     String[] my1Darr = new String[list.size()]; 
     my1Darr = list.toArray(my1Darr); 
+1

Qui non sono ammessi tipi primitivi. –

Problemi correlati