2015-09-29 8 views
5

So che sto facendo un errore da qualche parte in questo codice, ma non riesco a capirlo. Il player1.getId(); restituisce il valore 1 solo così sei consapevole. Sto cercando di stampare l'indice dell'array dove il valore è 1. Alla fine del codice, mi aspettavo che currentX fosse 0 e currentY fosse 0, ma erano entrambi 9. Qualsiasi aiuto sarebbe super.Java - Array 2d in loop per trovare l'indice di un valore non funzionante

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

sono Vuoi griglia [0] .length nel vostro interno per, sembra che si sta dopo griglia [i] .length –

risposta

7

Rimuovere il punto e virgola (;) alla fine del if (grid[i][j] == player1.getId());

Consideriamo come funziona if dichiarazione di java

La if dichiarazione di Java esegue è il codice di blocco se l'espressione dei if dichiarazione è true. Semi colon termina una frase di java. Se si mette il punto e virgola dei due punti vuoto dopo if, conta come un'istruzione vuota. Pertanto, l'istruzione if non esegue nulla quando si esegue l'istruzione if che ha un punto e virgola alla fine. Il compilatore Java compila il tuo codice in modo simile come segue.

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

{ 
    currentX = i; 
    currentY = j; 
} 

vedere cosa succede quando altri tipi dichiarazione era punto e virgola alla fine.

  • while anello

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

La condizione può essere true o false durante l'inizializzazione while ciclo. Se la condizione è true crea un ciclo infinito. Niente verrà eseguito dopo la linea. Se expression è false, esegue una volta il contenuto previsto del ciclo while.

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

Non riesce a compilare e ottenere un'eccezione { expected

+1

io solo aggiungere che è possibile evitare questo tipo di errore in futuro mettendo bretelle di apertura sulla stessa linea – Cinnam

+0

Grazie mille per questo. Sono imbarazzato da questa svista. –

+0

Allenati per mettere le parentesi graffe aperte, quindi non avrai questo bug. Questo tipo di bug è difficile da identificare quando si trova in un codice complesso. –

1

la condizione è true qui (se player1.getId() == 1):

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

Ma il codice contiene un errore logico: un gruppo di operatori qui - all'operatore vuoto; e verrà eseguito ...

currentX e currentY sarà sempre uguale alla lunghezza della matrice.

currentX = grid.length; 
currentY = grid[0].length; 
Problemi correlati