2011-10-16 16 views
16

Tengo una matriz bidimensional [20] [20] que he manipulado. En pocas palabras, estoy haciendo un proyecto de tortuga con instrucciones de entrada de usuario como pluma arriba = 0 y pluma abajo = 1. Cuando la pluma está abajo, la ubicación de la matriz individual, por ejemplo [3] [4] está marcada con un "1" .Java - impresión de matriz bidimensional

El último paso de mi programa es imprimir la matriz 20/20.

no puedo encontrar la manera de imprimirlo y yo tenga que sustituir el "1" con una "X"

El comando de impresión es en realidad un método dentro de una clase que va a llamar a un programa para padres .. . Sé que tengo que usar un bucle ... cualquier ayuda sería apreciada.

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

Respuesta

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(); 
    } 
} 

Y para reemplazar

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

Y puede hacerlo todo de una vez:

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

¿puedo reemplazar dentro del método printGrid? – user997462

+0

¡seguro! agregue el 'if' dentro de' – COD3BOY

+0

consulte la actualización ...... – COD3BOY

1

Usted debe reproducirse por filas y columnas y luego con una estructura como

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

pero supongo que esta es la tarea por lo que sólo lo pruebe.

Cambie el índice de fila/columna en los bucles para dependiendo de si necesita pasar primero y luego hacia abajo, primero hacia abajo y luego hacia adelante.

+0

¿cómo puedo reemplazar el 1 con una x? Por cierto, no es tarea ... Soy un profesional informático de 40 años (networking) a quien siempre le ha intrigado la programación, por lo que aprendí algo nuevo. – user997462

+0

Simplemente verifique el carácter sobre la marcha (dentro del lazo) y reemplácelo si es un '1' – Jack

+0

@Jack - algo así como 'imprimir (a [i] [j] == 1? 'X': ''); ' –

18

Algo como esto que contesto en otra pregunta

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

Bueno, dado que 'X' es un char y no un int, no puedes actuar dualmente reemplazarla en la propia matriz, sin embargo, el código siguiente debe imprimir char 'x' cada vez que se encuentra con 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

¿Cómo formateo esto para imprimir una cuadrícula de 20 por 20? – user997462

+0

Esto debería imprimir muy bien. Puede agregar un carácter de tabulación ("\ t", o cualquier carácter, su preferencia) al final de cada extracto de impresión para separar cada elemento. – Wyatt915

27

puede utilizar la Utilidad de mettod. 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

'Arrays.deepToString' no imprime una matriz 2D, pero en una sola línea, por muy útil que sea, no es de lo que se trata la cuestión (cuadrícula). –

0

Si conoce la maxValue (se puede hacer fácilmente si otra iteración de los elementos no es un problema) de la matriz, creo que el siguiente código más eficaz y genérico.

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

¿Qué le parece esto?

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++; 
    } 
} 
Cuestiones relacionadas