Frage

Ich habe ein Array in Form von ‚int[][]‘, die die Koordinaten eines kleinen Raster darstellt. Jede Koordinate hat seinen eigenen Wert zugewiesen. zB array[0][4] = 28 ......

Ich habe zwei Fragen. Erstens, wie kann ich iteriert durch alle gespeicherten Werte. Zweitens möchte ich einen Wert eingeben zu können und haben ihre spezifischen Koordinaten in das Netz zurückgeführt. Was wäre der beste Weg, dies zu nähern?

Vielen Dank für jede Hilfe!

War es hilfreich?

Lösung

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

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 sei die einfachste Lösung für die Frage „die Koordinaten finden“ - nur prüfen, ob der Wert in der inneren Schleife korrekt ist

.

Andere Tipps

iterieren die Werte Loops verwenden:

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

, um die Koordinaten Zugriff basierend auf dem Wert Sie irgendeine Art von Doppel hashmap benötigen würden (ein bei java.util.HashMap aussehen), aber ich bin mir bewusst, nichts, das so direkt funktioniert

Um iterieren alle Elemente im Netz 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 sei denn, das Raster in irgendeiner Weise sortiert wird, dann werden Sie wahrscheinlich nicht tun besser als eine Brute-Force-Methode.

Für das Iterieren, ich denke, es ist etwas so sein würde (Syntax off ein wenig sein könnte, habe ich 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 würden Sie vermutlich, dass verwenden müssen, um zu wiederholen, dann wieder, wenn Sie es gefunden haben.

Wenn Sie die Position der gleichen Wert mehrfach aufzublicken könnte dann könnten Sie die Ergebnisse mit einem Hash-Tabelle memoize wollen.

Verwenden Sie für Schleifen verschachtelt über die x- und y-Dimensionen zu durchlaufen, die Sie über jeden Wert loslässt, einen nach dem anderen.

Für einen Wert eingegeben hat, nur das Gleiche tun wie oben, aber für ein Spiel zu Ihrem gewünschten Wert suchen.

Sie werden am glücklichsten, wenn Sie alle diese Sammlungen innerhalb einer einzigen Klasse blockieren und schützen Sie sie in keiner Weise.

Das bedeutet auch Ihre Suche und Lookup-Routinen in diese Klasse zu bewegen.

Für die Lagerung ist jede Iteration bedeckt, eine Hash-Tabelle hinzufügen und einen Nachschlag. Ich habe diesen Kommentar auf Nickolai der Post:

Speicher new Integer (ix + iy * 1000) als der Wert in der Hash-Tabelle. Wenn Ihr y Index über 1000 verwenden, um eine größere Zahl gehen kann - ints sind wirklich groß. Um es nutzen ix back = val% 1000, iy = val / 1000.

Wenn Ihr Array und Hash-Tabelle in der gleichen Klasse eingekapselt sind, wird der Rest des Codes ziemlich einfach zu schreiben und viel sauberer.

Es ist in der Regel keine Möglichkeit, die spezifischen Koordinaten eines bestimmten Wertes zu finden, außer durch durch das Feld gehen und die Suche nach ihm. Wenn die Werte in dem Array sind jedoch garantiert eindeutig sein (d.h. jeder Wert tritt nur in einer Zelle), eine separate Array als Index beibehalten konnte, die die Koordinaten von jedem Wert speichert durch den Wert indiziert.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top