Introducción a los patrones en Java

En el artículo Patrones en Java, antes de aprender cualquier lenguaje de programación en Java y profundizar en los conceptos avanzados, es muy importante y fundamental comprender el funcionamiento de los bucles. Aunque hay 3 tipos de bucles que son para bucle, while y do-while. Cada ciclo se utiliza de acuerdo con la situación particular de un programa, ya que son ligeramente diferentes entre sí. Para usar varios bucles se requiere cierta lógica de programación y para este propósito, se les da a los programadores práctica de patrones ya que implica el uso de poder lógico y de razonamiento. Puede ser la impresión de figuras geométricas (como triángulos, cuadrados, etc.), pirámides, cuadros en varios patrones de estrellas, números, estilo de caracteres en la pantalla de la consola. El formato o la sintaxis básica de los bucles pueden diferir de un lenguaje de programación a otro, pero la lógica general para imprimir estos patrones sigue siendo la misma.

Ejemplo de patrones en Java

Vamos a entender cómo dibujar patrones en Java a través de algunos ejemplos.

Ejemplo1: Imprimir media pirámide usando números.

Código:

public class Pyramid
(
public static void main(String() args)
(
int i, j;
​//outermost loop to represent the number of rows which is 5 in this case for(i= 1; i<= 5; i++)
(
​//innermost loop is to print the numbers in the specific rows for (j=1; j<=i; j++)
(
System.out.print(j +" " );
)
System.out.println();
)
)
)

Salida:

En el ejemplo anterior, solo se requieren 2 bucles básicos para imprimir el patrón, el primero para el bucle es para el número de filas. En nuestro caso, hemos definido las filas, es decir, 5, de lo contrario, también podemos tomar la entrada del usuario y almacenarla en una variable. El ciclo interno es para imprimir los números en una fila particular. Después de completar 1 fila o el final del ciclo 'j', la línea se cambia usando println ().

Ejemplo2: Imprimir flecha de números.

Código:

public class NumberTriangle
(
public static void main(String() args)
(
int i, j;
int rows =7;
​//outermost loop to represent the number of rows which is 7 in this case
//for the upper half of arrow
for (i=1; i<= rows; i++)
(
​//innermost loop is to print the numbers in the specific rows
//for the upper half of arrow
for (j=1; j<=i; j++)
(
System.out.print(j + " ");
)
System.out.println();
)
​//outermost loop to represent the number of rows which is 6 in this case
//for the lower half of arrow
for (i=rows-1; i>=1; i--)
(
​//innermost loop is to print the numbers in the specific rows
//for the lower half of arrow
for (j=1; j<=i; j++)
(
System.out.print(j + " ");
)
System.out.println();
)
)
)

Salida:

En el ejemplo anterior, necesitamos dividir la flecha en dos mitades y usar 2 bucles para cada mitad. En la primera mitad del número de filas sería el valor inicial establecido para las filas, mientras que para la mitad inferior el recuento de la fila es 1 menos que el valor inicial. Los bucles internos para ambas mitades se utilizan para recorrer cada fila de acuerdo con el bucle externo.

Ejemplo 3: Impresión de la pirámide completa con estrellas (*).

Código:

public class FullPyramid
(
public static void main(String() args)
(
int i, j, k;
int rows = 5;
//outermost loop to represent the number of rows which is 5 in this case for(i= 1; i<= rows; i++)
(
//innermost loop to represent the spaces in pyramid for (j= 1; j<= rows-i; j++)
(
System.out.print(" ");
)
​//innermost loop to represent the stars (*) in pyramid for (k= 1; k<= 2*i-1; k++)
(
System.out.print("* ");
)
System.out.println();
)
)
)

Salida:

En el ejemplo anterior, debemos hacer 3 cosas, es decir, tener en cuenta el número total de filas para la impresión de la pirámide para la que el primer bucle for funciona de 1 a variable de filas. En segundo lugar, primero necesitamos imprimir los espacios en la pirámide y luego el patrón (*) después de los espacios. Para este segundo y tercero se utilizan bucles for que están dentro del bucle externo 'i'.

Ejemplo 4: Impresión de media pirámide inversa usando números.

Código:

public class ReversePyramid
(
public static void main(String() args)
(
int i, j, k;
int rows = 5;
​//outermost loop to represent the number of rows which is 5 in this case for(i= 1; i<= rows; i++)
(
//innermost loop to represent the spaces
for (j= 1; j<= rows-1; j++)
(
System.out.print(" ");
)
​//innermost loop to represent the stars (*) in pyramid for (k= 1; k<= i; k++)
(
System.out.print("* ");
)
System.out.println();
)
)
)

Salida:

La media pirámide simple es fácil ya que necesitamos manejar los números, * o los caracteres que estamos imprimiendo, pero para la pirámide inversa, primero debemos imprimir los espacios y luego el patrón que es (*) en nuestro caso. Por lo tanto, 3 para bucles se utilizan de manera similar a los de la pirámide completa.

Ejemplo 5: Imprimir media pirámide usando alfabetos.

Código:

public class AlphabetPyramid
(
public static void main(String() args)
(
int i, j;
​//outermost loop to represent the number of rows which is 5 in this case for(i= 1; i<= 5; i++)
(
int ch = 65;
​//innermost loop to represent the alphabets in a pyramid in particular row for (j= 1; j<= i; j++)
(
System.out.print((char)(ch + i - 1) + " ");
)
System.out.println();
)
)
)

Salida:

La pirámide se imprime con la misma lógica que se usó en el ejemplo anterior, usando 2 para bucles, uno para el número de filas y otros para la impresión de caracteres en una fila en particular. Pero lo principal que debe tenerse en cuenta es el manejo de los datos de los personajes. 'A' tiene un valor numérico 65 en Java, por lo que toda la lógica matemática se realiza utilizando el valor numérico del alfabeto y, al final, se imprime en el formato de caracteres.

Ejemplo 6: Patrón de impresión de alfabetos.

Código:

public class AlphabetPattern
(
public static void main(String() args)
(
int i, j;
//outermost loop to represent the number of rows which is 5 in this case for(i= 1; i<= 5; i++)
(
int ch = 65;
​//innermost loop to represent the alphabets for (j= 1; j<= i; j++)
(
System.out.print((char)(ch - 1 + j) + " ");
)
System.out.println();
)
)
)

Salida:

El patrón básico seguido para tratar con el valor de carácter y el 2 para los bucles en el ejemplo anterior es similar a la única diferencia del Ejemplo 5, siendo la lógica simple utilizada para imprimir el patrón deseado.

Ejemplo 7: Imprimir cuadrado usando estrellas (*).

Código:

public class SquarePattern
(
public static void main(String() args)
(
int i, j;
​//outermost loop to represent the number of rows which is 5 in this case for(i= 1; i<= 5; i++)
(
int ch = 65;
//innermost loop to represent the stars (*) for (j= 1; j<= 5; j++)
(
System.out.print(" * " + " ");
)
System.out.println();
)
)
)

Salida:

Para la impresión de cuadrados, necesitamos largo y ancho, es decir, ambos lados del cuadrado deben ser iguales, que es 5 en nuestro caso. Entonces, el primer bucle for se usa para la longitud o el número de filas en el cuadrado y el bucle for interno se usa para el ancho del cuadrado, es decir, 5 estrellas en una sola fila.

Ejemplo 8: Imprimir rectángulo usando estrellas (*).

Código:

public class RectanglePattern
(
public static void main(String() args)
(
int i, j;
​//outermost loop to represent the number of rows which is 5 in this case for(i= 1; i<= 5; i++)
(
int ch = 65;
​//innermost loop to represent columns the stars (*) for (j= 1; j<= 9; j++)
(
System.out.print(" * " + " " );
)
System.out.println();
)
)
)

Salida:

La lógica básica de imprimir el rectángulo de (*) es la misma que la impresión de cuadrados, la única diferencia entre es la longitud y el ancho diferentes del rectángulo. Aquí el bucle 'i' corresponde a la longitud del rectángulo y el bucle 'j' interno corresponde al ancho del bucle. En nuestro programa, se toma como un valor constante, también podemos preguntarle al usuario y almacenarlo en variables separadas.

Ejemplo 9: Imprimir un diamante usando estrellas.

Imprimir un diamante en Java es un proceso muy simple. Implica imprimir 2 pirámides, 1 en dirección ascendente y otra en dirección invertida. Básicamente, necesitamos usar los bucles de la misma manera que codificamos para imprimir dos pirámides separadas.

Código:

public class Diamond
(
public static void main(String() args)
(
int i, j, k;
int rows = 5;
​//outermost loop to represent the number of rows which is 5 in this case.
// Creating upper pyramid
for(i= 1; i<= rows; i++)
(
//innermost loop to represent the spaces in upper pyramid for (j= 1; j<= rows-i; j++)
(
System.out.print(" ");
)
​//innermost loop to represent the stars (*) in upper pyramid for (k= 1; k<= 2*i-1; k++)
(
System.out.print("* ");
)
System.out.println();
)
​//outermost loop for the rows in the inverted pyramid for (i = rows-1; i>0; i--)
(
​//innermost loop for the space present in the inverted pyramid for (j=1; j<= rows - i; j++)
(
System.out.print(" ");
)
​//innermost loop inside the outer loop to print the ( * ) pattern in inverted pyramid for (k = 1; k<= 2*i-1; k++)
(
System.out.print("* ");
)
System.out.println();
)
)
)

En el ejemplo anterior, se aplica casi la misma lógica para crear las pirámides, una en dirección ascendente y otra en dirección invertida. El primer bucle for es para el número de líneas o filas en el patrón y otros dos para bucles son para espacios y el patrón de estrellas (*) en el patrón.

Salida:

Ejemplo 10: Imprimir números binarios en formato de escalera.

Código:

public class BinaryStair
(
public static void main(String() args)
(
int i, j;
//outer loop for the total rows which is 5 in this case for (i = 1; i <= 5; i++)
(
​//inner loop for the pattern of 0 and 1 in each row for (j = 1; j<= i ; j++)
(
if (j % 2 ==0)
(
System.out.print(0);
)
else
(
System.out.print(1);
)
)
System.out.println();
)
)
)

Salida:

En el ejemplo anterior, para imprimir un patrón binario, el bucle externo 'i' se usa para el número total de filas y el bucle interno 'j' se itera hasta el bucle externo 'i' porque en la primera fila necesitamos 1 valor, para la segunda fila necesitamos 2 valores, y así sucesivamente. Si se utilizan sentencias y más para imprimir valores alternativos de 0 y 1. Supongamos por primera vez que i = 1, j = 1 y 1% 2! = 0, entonces se imprime 1 y la ejecución se moverá fuera de bucle interno

Ejemplo 11: Programa para imprimir patrones repetidos del alfabeto.

Código:

public class AlphabetReverseOrder
(
public static void main(String() args)
(
int i, j, k;
//outer loop for the total rows which is 5 in this case for (i = 0 ; i<=5; i++)
(
int ch= 65;
//inner loop for the pattern of alphabets in till 'i' loop for (j = 0; j <=i ; j++)
(
System.out.print((char) (ch+j) + " ");
)
//inner loop for the pattern of alphabets in reverse order from 'i' loop for (k= i-1; k >=0; k--)
(
System.out.print((char) (ch+k) + " ");
)
System.out.println();
)
)
)

Salida:

En el ejemplo anterior, si observamos cada fila de patrón, necesitamos imprimir el alfabeto primero en orden creciente, es decir, AB y luego en orden inverso, es decir, AB A. Para esto, necesitamos 3 bucles, primero para bucle para el número total de filas. Segundo bucle for para imprimir los alfabetos en orden creciente, luego el tercer bucle for que permanece dentro del bucle 'i' externo e imprime los alfabetos en la misma línea pero en orden inverso al bucle 'j'.

Conclusión

El ejemplo anterior y sus explicaciones muestran claramente cómo hacer tales patrones en Java. Aunque estos patrones parecen ser difíciles al principio, pero observándolos profundamente de cómo se está repitiendo el patrón en una sola fila y de acuerdo con cuántos bucles se deben usar, es fácil hacer esto de manera práctica. Hoy también en entrevistas con grandes empresas, se les pide a los candidatos que escriban la lógica de patrones de diferentes niveles de dificultad. Porque esta creación de patrones muestra el conocimiento básico lógico y de programación de un individuo.

Artículo recomendado

Esta ha sido una guía de Patrones en Java. Aquí discutimos Introducción a los patrones en Java y los ejemplos de diferentes patrones junto con la salida. También puede consultar nuestros otros artículos sugeridos para obtener más información:

  1. Patrones de estrellas en Java
  2. Marcos en Java
  3. Diseño en Java
  4. Introducción a los patrones en PHP
  5. Patrones en JavaScript con ejemplos