Java int[][] Array - Iterieren und Finden von Wert

Ich habe ein Array in Form von int[][]' that represents the co-ordinates of a small grid. Each co-ordinate has been assigned its own value. eg ', das die Koordinaten eines kleinen Rasters darstellt. Jeder Koordinate wurde ein eigener Wert zugewiesen. zB array[0][4] = 28...... ......

Ich habe zwei Fragen. Erstens, wie durchsiebe ich alle gespeicherten Werte. Zweitens möchte ich in der Lage sein, einen Wert einzugeben und seine spezifischen Koordinaten im Raster zurückzugeben. Wie könnte man am besten vorgehen?

Vielen Dank für jede Hilfe!

Antwort auf "Java int[][] Array - Iterieren und Finden von Wert " 7 von antworten

zu iterieren über die Werte verwenden Schleifen:

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

auf die Koordinaten basierend auf dem Wert zugreifen würde Sie eine Art von Doppel-Hashmap benötigen (siehe java.util.HashMap), aber ich bin mir nichts bewusst, das so direkt tut

Wenn Ihr Raster nicht in irgendeiner Weise sortiert ist, dann werden Sie wahrscheinlich nichts Besseres als eine Brute-Force-Suche machen.

Für die Iterierung, ich denke, es wäre etwa so (Syntax könnte ein bisschen aus sein, ich habe nicht mit Arrays in Java für eine Weile behandelt.):

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

Für die Suche müssten Sie wahrscheinlich das verwenden, um zu iterieren, dann zurückkehren, sobald Sie es gefunden haben.

Wenn Sie die Position des gleichen Werts möglicherweise mehrmals suchen, dann können Sie die Ergebnisse mit einem Hashtable speichern.

Um alle Elemente im Raster zu iterieren, versuchen Sie dies:

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

Es gibt in der Regel keine Möglichkeit, die spezifischen Koordinaten eines bestimmten Werts zu finden, außer durch das Array zu gehen und danach zu suchen. Wenn die Werte im Array jedoch garantiert eindeutig sind (d. h. jeder Wert tritt nur in einer Zelle auf), können Sie ein separates Array als Index beibehalten, das die Koordinaten jedes Wertes speichert, der durch den Wert indiziert wird.

Verwenden Sie verschachtelte Schleifen, um die x- und y-Dimensionen zu durchlaufen, mit denen Sie jeden Wert nacheinander durchlaufen können.

Für die Eingabe eines Werts, tun Sie einfach das gleiche wie oben, aber suchen Sie nach einer Übereinstimmung mit dem gewünschten Wert.

Sie können entweder für Schleifen oder für Schleifen verbessert iterieren:

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

oder

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

Die erste Version wäre die einfachste Lösung für die Frage "Die Koordinaten finden" - überprüfen Sie einfach, ob der Wert in der inneren Schleife korrekt ist.

Sie werden am glücklichsten sein, wenn Sie alle diese Sammlungen in einer einzelnen Klasse blockieren und sie in keiner Weise verfügbar machen.

Dies bedeutet, dass Sie Ihre Such- und Suchroutinen auch in diese Klasse verschieben.

Für die Lagerung ist jeder iterating abgedeckt, fügen Sie eine Hashtable und eine Suche. Ich habe diesen Kommentar auf nickolais Beitrag gesetzt:

Speichern Sie neue Integer(ix + iy * 1000) als Wert in Ihrer Hash-Tabelle. Wenn Ihr y-Index über 1000 gehen kann, verwenden Sie eine größere Anzahl - Ints sind wirklich groß. Um es zurück zu bekommen, verwenden Sie ix=val%1000, iy=val/1000.

Wenn Ihr Array und Ihre Hashtabelle in derselben Klasse gekapselt sind, ist der Rest des Codes ziemlich einfach zu schreiben und viel sauberer.