Domanda

Ho un array sotto forma di ' int [] [] ' che rappresenta le coordinate di una piccola griglia. A ciascuna coordinata è stato assegnato il proprio valore. ad es. array [0] [4] = 28 ......

Ho due domande. In primo luogo, come posso scorrere tutti i valori memorizzati. In secondo luogo, voglio essere in grado di inserire un valore e di restituire le sue coordinate specifiche nella griglia. Quale sarebbe il modo migliore per affrontarlo?

Grazie per l'aiuto!

È stato utile?

Soluzione

Puoi iterare con per i loop o migliorato per i loop:

for (int row=0; row < grid.length; row++)
{
    for (int col=0; col < grid[row].length; col++)
    {
        int value = grid[row][col];
        // Do stuff
    }
}

o

// Note the different use of "row" as a variable name! This
// is the *whole* row, not the row *number*.
for (int[] row : grid)
{
    for (int value : row)
    {
         // Do stuff
    }
}

La prima versione sarebbe la soluzione più semplice per trovare le coordinate " domanda: basta verificare se il valore nel ciclo interno è corretto.

Altri suggerimenti

per scorrere i valori usa loop:

 int[][] matrix   
 //...
 for(int row[] : matrix)
     for(int cell : row){
      //do something with cell
    }

per accedere alle coordinate in base al valore avresti bisogno di una sorta di doppia hashmap (guarda java.util.HashMap) ma non sono a conoscenza di nulla che lo faccia direttamente

Per scorrere su tutti gli elementi nella griglia prova questo:

int grid[][] = new int[10][10];

for(int i = 0; i < grid.length(); ++i) {
    for(int j = 0; j < grid[i].length(); ++j) {
        // Do whatever with grid[i][j] here
    }
}

A meno che la tua griglia non sia ordinata in qualche modo, probabilmente non farai niente di meglio di una ricerca di forza bruta.

Per iterare, penso che sarebbe qualcosa del genere (la sintassi potrebbe essere un po 'fuori, non ho affrontato array in Java per un po'.):

int[][] grid;  // just assuming this is already assigned somewhere

for(int x = 0 ; x < grid.length ; x++) {
  int[] row = grid[x];
  for(int y = 0 ; y < row.length ; y++) {
    int value = row[y];
    // Here you have the value for grid[x][y] and can do what you need to with it
  }
}

Per la ricerca probabilmente dovrai usarlo per iterare, quindi tornare dopo averlo trovato.

Se potresti cercare più volte la posizione dello stesso valore, potresti voler memorizzare i risultati usando una tabella hash.

Usa nidificato per i loop per scorrere le dimensioni delle x e y, che ti consente di andare oltre ogni valore, uno alla volta.

Per inserire un valore, fai semplicemente come sopra, ma cerca una corrispondenza con il valore richiesto.

Sarai più felice se blocchi tutte queste raccolte all'interno di una singola classe e non le esponi in alcun modo.

Ciò significa spostare anche le routine di ricerca e ricerca in questa classe.

Per l'archiviazione, tutti hanno coperto l'iterazione, aggiungono una tabella hash e una ricerca. Ho inserito questo commento sul post di nickolai:

Memorizza nuovo intero (ix + iy * 1000) come valore nella tua tabella hash. Se il tuo indice y può superare i 1000 usa un numero maggiore - gli ints sono davvero grandi. Per recuperarlo usa ix = val% 1000, iy = val / 1000.

Se l'array e la tabella hash sono incapsulati nella stessa classe, il resto del codice sarà abbastanza facile da scrivere e molto più pulito.

In genere non c'è modo di trovare le coordinate specifiche di un determinato valore se non attraverso l'array e cercandolo. Tuttavia, se i valori nell'array sono garantiti come univoci (ovvero ogni valore si verifica solo in una cella), è possibile mantenere un array separato come indice, che memorizza le coordinate di ciascun valore indicizzato dal valore.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top