Solución Ejercicio Java : Matriz con entradas en espiral
Solución Ejercicio Java : Matriz con entradas en espiral
Entrada:
Dos números enteros m, n, separados por un espacio, cuyos valores están entre 1 y 100 (incluyéndolos).
Salida:
La matriz requerida (para mayor detalle, ver el ejemplo de salida, aunque no se requiere exactamente el mismo espaciado, sólo el orden).
Solución:
1. Clase Espiral
package clasi2004; public class Espiral { private int dir; private int x; private int y; private int matriz[][]; private int total; private int linea; private int lineaX; private int num; public Espiral(int a,int b) { x=a; y=b; total=x*y; dir=0; linea=1; lineaX=0; matriz=new int[x][y]; num=1; creaMatriz(); } public void muestraMatriz(){ for (int i = 0; i < matriz.length; i++) { for (int j = 0; j < matriz[0].length; j++) { System.out.print(matriz[i][j]+"\t"); } System.out.println(""); } } private void creaMatriz() { do { switch (dir) { case 0: llenaDer(); break; case 1: llenaAba(); break; case 2: llenaIzq(); break; case 3: llenaArr(); break; default: break; } } while (num<=total); } /** * */ private void llenaArr() { for (int i = x-2; i > lineaX; i--) { matriz[i][lineaX]=num; num++; } x=x-1; dir=0; } private void llenaIzq() { for (int i = y-lineaX-2; i >= lineaX; i--) { matriz[x-1][i]=num; num++; } dir=3; } private void llenaAba() { for (int i = linea; i < x; i++) { matriz[i][y-linea]=num; num++; } dir=2; linea++; } private void llenaDer() { if(x!=1){ int yy=x-(x/2); if(matriz[yy][lineaX]!=0) lineaX++; } for (int i = lineaX; i <y-lineaX ; i++) { matriz[lineaX][i]=num; num++; } dir=1; } }
2. Aplicacion
package clasi2004; import java.util.Scanner; public class AplicEspiral { /** * @param Author DAvid PAredes */ public static void main(String[] args) { @SuppressWarnings("resource") Scanner leer=new Scanner(System.in); String a=leer.nextLine(); EjecutaEspiral(a); } private static void EjecutaEspiral(String a) { int x=0,y=0; char[]letras=a.toCharArray(); String aux=""; for (int i = 0; i < letras.length; i++) { if (letras[i]==' ') { x=Integer.parseInt(aux); aux=""; } else{ aux=aux+letras[i]; } } y=Integer.parseInt(aux); Espiral e=new Espiral(x, y); e.muestraMatriz(); } }
¿Cómo hacer que esta inicie desde el centro de la matriz y no de la esquina?
ResponderEliminar