2011-10-16 31 views
16

Ho una matrice bidimensionale [20] [20] che ho manipolato. In poche parole sto facendo un progetto tartaruga con l'utente che inserisce istruzioni come pen up = 0 e pen down = 1. Quando la penna è giù la posizione dell'array individuale, ad esempio [3] [4] è contrassegnato con un "1" .Java - stampa array bidimensionale

L'ultimo passaggio del mio programma è stampare l'array 20/20.

Non riesco a capire come stamparlo e ho bisogno di sostituire la "1" con una "X"

Il comando di stampa è in realtà un metodo all'interno di una classe che un programma genitore chiamerà .. So che devo usare un loop ... ogni aiuto sarebbe apprezzato.

public void printGrid() 
     { 
      System.out.println... 
     } 

risposta

24
public void printGrid() 
{ 
    for(int i = 0; i < 20; i++) 
    { 
     for(int j = 0; j < 20; j++) 
     { 
     System.out.printf("%5d ", a[i][j]); 
     } 
     System.out.println(); 
    } 
} 

E per sostituire

public void replaceGrid() 
{ 
    for (int i = 0; i < 20; i++) 
    { 
     for (int j = 0; j < 20; j++) 
     { 
     if (a[i][j] == 1) 
      a[i][j] = x; 
     } 
    } 
} 

E si può fare tutto questo in una volta sola:

public void printAndReplaceGrid() 
{ 
    for(int i = 0; i < 20; i++) 
    { 
     for(int j = 0; j < 20; j++) 
     { 
     if (a[i][j] == 1) 
      a[i][j] = x; 
     System.out.printf("%5d ", a[i][j]); 
     } 
     System.out.println(); 
    } 
} 
+0

posso sostituire all'interno del metodo printGrid? – user997462

+0

sicuro! aggiungere 'if' all'interno di quello' – COD3BOY

+0

vedere l'aggiornamento ...... – COD3BOY

1

Si dovrebbe loop righe e poi le colonne con una struttura come

for ...row index... 
    for ...column index... 
    print 

ma credo che questo è compito quindi basta provarlo voi stessi.

Scambia l'indice riga/colonna nei loop for a seconda se è necessario passare prima e poi giù, prima verso il basso e poi su across.

+0

come sostituire 1 con una x? A proposito, non i compiti a casa ... Sono un professionista IT di quarant'anni (networking) che è sempre stato interessato dalla programmazione per imparare qualcosa di nuovo. – user997462

+0

Basta controllare il carattere in movimento (all'interno del loop) e sostituirlo se è un '1' – Jack

+0

@Jack - qualcosa come 'print (a [i] [j] == 1? 'X': ''); ' –

18

Qualcosa di simile che rispondo a un'altra domanda

public class Snippet { 
    public static void main(String[] args) { 
     int [][]lst = new int[10][10]; 

     for (int[] arr : lst) { 
      System.out.println(Arrays.toString(arr)); 
     } 
    } 

} 
1

Bene, dato che 'X' è un char e non un int, non puoi agire dualmente sostituirlo nella matrice stessa, tuttavia, il seguente codice dovrebbe stampare una 'x' char ogni volta che rileva un 1.

public void printGrid(int[][] in){ 
    for(int i = 0; i < 20; i++){ 
     for(int j = 0; j < 20; j++){ 
      if(in[i][j] == 1) 
       System.out.print('X' + "\t"); 
      else 
       System.out.print(in[i][j] + "\t"); 
     } 
     System.out.print("\n"); 
    } 
} 
+0

Come si formatta questo per stampare una griglia 20 per 20? – user997462

+0

Questo dovrebbe stampare bene. È possibile aggiungere un carattere di tabulazione ("\ t" o qualsiasi carattere, le proprie preferenze) alla fine di ogni istruzione di stampa per separare ciascun elemento. – Wyatt915

27

è possibile utilizzare il mettod Utility. Arrays.deeptoString();

public static void main(String[] args) { 
    int twoD[][] = new int[4][]; 
    twoD[0] = new int[1]; 
    twoD[1] = new int[2]; 
    twoD[2] = new int[3]; 
    twoD[3] = new int[4]; 

    System.out.println(Arrays.deepToString(twoD)); 

} 
+1

'Array.deepToString' stampa array 2D ma su una sola riga, per quanto utile possa essere, non è la domanda (griglia). –

0

Se si conosce il maxValue (può essere fatto facilmente se un altro iterazione degli elementi non è un problema) della matrice, trovo il seguente codice più efficace e generico.

int numDigits = (int) Math.log10(maxValue) + 1; 
    if (numDigits <= 1) { 
     numDigits = 2; 
    } 
    StringBuffer buf = new StringBuffer(); 
    for (int i = 0; i < matrix.length; i++) { 
     int[] row = matrix[i]; 
     for (int j = 0; j < row.length; j++) { 
      int block = row[j]; 
      buf.append(String.format("%" + numDigits + "d", block)); 
      if (j >= row.length - 1) { 
       buf.append("\n"); 
      } 
     } 
    } 
    return buf.toString(); 
1

Che ne dici di provare questo?

public static void main (String [] args) 
{ 
    int [] [] listTwo = new int [5][5]; 
    // 2 Dimensional array 
    int x = 0; 
    int y = 0; 
    while (x < 5) { 
     listTwo[x][y] = (int)(Math.random()*10); 

     while (y <5){ 
      listTwo [x] [y] = (int)(Math.random()*10); 
      System.out.print(listTwo[x][y]+" | "); 
      y++;     
     } 
     System.out.println(""); 
     y=0; 
     x++; 
    } 
}