2015-09-29 6 views
5

Ich weiß, ich mache irgendwo einen Fehler in diesem Code, aber ich kann es nicht herausfinden. Die player1.getId(); gibt nur den Wert 1 zurück, damit Sie sich dessen bewusst sind. Ich versuche, den Index des Arrays zu drucken, wo der Wert 1 ist. Am Ende des Codes erwartete ich, dass CurrentX 0 und CurrentY 0 sein, aber sie waren beide 9. Jede Hilfe wäre super.Java - Schleife 2d Array zu Index eines Wertes nicht funktioniert

int[][] grid = { 
    {3, 3, 3, 3, 3, 3, 3, 3, 3, 3}, 
    {3, 3, 3, 3, 3, 3, 3, 3, 3, 3}, 
    {3, 3, 3, 3, 3, 3, 3, 3, 3, 3}, 
    {3, 3, 3, 3, 3, 3, 3, 3, 3, 3}, 
    {3, 3, 3, 3, 3, 3, 3, 3, 3, 3}, 
    {3, 3, 3, 3, 3, 3, 3, 3, 3, 3}, 
    {3, 3, 3, 3, 3, 3, 3, 3, 3, 3}, 
    {3, 3, 3, 3, 3, 3, 3, 3, 3, 3}, 
    {3, 3, 3, 3, 3, 3, 3, 3, 3, 3}, 
    {3, 3, 3, 3, 3, 3, 3, 3, 3, 3} 
}; 

int currentX = 0; 
int currentY = 0; 

grid[0][0] = player1.getId(); 

grid[0][9] = 2; 

for (int i = 0; i < grid.length; i++) { 
    for (int j = 0; j < grid[0].length; j++) { 
     if (grid[i][j] == player1.getId()); 
     { 
      currentX = i; 
      currentY = j; 
     } 
     System.out.print(grid[i][j]); 
    } 

} 
System.out.println(); 
System.out.println("Player1 is currently in row " + currentX + " and column " + currentY); 
+0

sind Sie sicher, dass Sie grid [0] .length in Ihrem inneren wollen, scheint, wie Sie nach dem Raster sind [i] .length –

Antwort

7

Entfernen Sie das Semikolon (;) am Ende des if (grid[i][j] == player1.getId());

Überlegen Sie, wie funktioniert if Anweisung von Java

Die if Anweisung von Java führt es ist Block-Code, wenn der Ausdruck von if Aussage ist true. Semikolon beendet eine Aussage von Java. Wenn Sie nach if-Anweisung einen leeren Semikolon eingeben, zählt dies als leere Anweisung. Also, if Anweisung tut nichts bei der Ausführung if Anweisung, die Semikolon am Ende. Der Java-Compiler kompiliert Ihren Code ähnlich wie folgt.

if (grid[i][j] == player1.getId()){ 
    //nothing here 
} 

{ 
    currentX = i; 
    currentY = j; 
} 

Sehen Sie, was passiert, wenn andere Art Anweisung am Ende Semikolon hatte.

  • while loop

    while (expression); 
        { 
         //something goes here 
        } 
    

Der Zustand kann true oder false sein, wenn while Schleife initialisiert. Wenn die Bedingung true ist, wird eine Endlosschleife erstellt. Nach der Zeile wird nichts ausgeführt. Wenn Ausdruck false ist, führt er einmal den erwarteten Inhalt von while Schleife aus.

  • switch (integer); und catch (Exception e);

Es schlägt fehl, zu kompilieren und zu erhalten, eine Ausnahme { expected

+1

ich nur will hinzufügen, dass Sie diese Art von Fehler in der Zukunft verhindern indem Sie öffnende Klammern in derselben Zeile setzen – Cinnam

+0

Vielen Dank dafür. Ich schäme mich vor diesem Versehen. –

+0

Trainiere, um offene Hosenträger zu öffnen, dann wirst du diesen Fehler nicht bekommen. Diese Art von Bug ist schwer zu identifizieren, wenn sie sich in einem komplexen Code befindet. –

1

Die Bedingung ist true hier (wenn player1.getId() == 1):

if(grid[i][j] == player1.getId());

Aber der Code enthält einen logischen Fehler: eine Gruppe von Operatoren hier - die leeren Betreiber; und es wird ausgeführt ...

currentX und currentY werden immer gleich sein, die Länge des Arrays.

currentX = grid.length; 
currentY = grid[0].length; 
Verwandte Themen