- * Each instance of this class represents a different hash function based on its index.
+ * Each instance of this class represents a different hash function based on its
+ * index.
*
*
* @param The type of elements to be hashed.
diff --git a/src/main/java/com/thealgorithms/matrix/PrintAMatrixInSpiralOrder.java b/src/main/java/com/thealgorithms/matrix/PrintAMatrixInSpiralOrder.java
index 2757da1f9023..4ae5970a9574 100644
--- a/src/main/java/com/thealgorithms/matrix/PrintAMatrixInSpiralOrder.java
+++ b/src/main/java/com/thealgorithms/matrix/PrintAMatrixInSpiralOrder.java
@@ -3,17 +3,41 @@
import java.util.ArrayList;
import java.util.List;
+/**
+ * Utility class to print a matrix in spiral order.
+ *
+ * Given a 2D array (matrix), this class provides a method to return the
+ * elements
+ * of the matrix in spiral order, starting from the top-left corner and moving
+ * clockwise.
+ *
+ *
+ * @author Sadiul Hakim (https://github.com/sadiul-hakim)
+ */
public class PrintAMatrixInSpiralOrder {
+
/**
- * Search a key in row and column wise sorted matrix
+ * Returns the elements of the given matrix in spiral order.
+ *
+ * @param matrix the 2D array to traverse in spiral order
+ * @param row the number of rows in the matrix
+ * @param col the number of columns in the matrix
+ * @return a list containing the elements of the matrix in spiral order
*
- * @param matrix matrix to be searched
- * @param row number of rows matrix has
- * @param col number of columns matrix has
- * @author Sadiul Hakim : https://github.com/sadiul-hakim
+ *
+ * Example:
+ *
+ *
+ * int[][] matrix = {
+ * {1, 2, 3},
+ * {4, 5, 6},
+ * {7, 8, 9}
+ * };
+ * print(matrix, 3, 3) returns [1, 2, 3, 6, 9, 8, 7, 4, 5]
+ *
+ *
*/
public List print(int[][] matrix, int row, int col) {
-
// r traverses matrix row wise from first
int r = 0;
// c traverses matrix column wise from first
diff --git a/src/main/java/com/thealgorithms/others/PrintAMatrixInSpiralOrder.java b/src/main/java/com/thealgorithms/others/PrintAMatrixInSpiralOrder.java
deleted file mode 100644
index abfdd006879e..000000000000
--- a/src/main/java/com/thealgorithms/others/PrintAMatrixInSpiralOrder.java
+++ /dev/null
@@ -1,52 +0,0 @@
-package com.thealgorithms.others;
-
-import java.util.ArrayList;
-import java.util.List;
-
-public class PrintAMatrixInSpiralOrder {
- /**
- * Search a key in row and column wise sorted matrix
- *
- * @param matrix matrix to be searched
- * @param row number of rows matrix has
- * @param col number of columns matrix has
- * @author Sadiul Hakim : https://github.com/sadiul-hakim
- */
- public List print(int[][] matrix, int row, int col) {
- // r traverses matrix row wise from first
- int r = 0;
- // c traverses matrix column wise from first
- int c = 0;
- int i;
- List result = new ArrayList<>();
- while (r < row && c < col) {
- // print first row of matrix
- for (i = c; i < col; i++) {
- result.add(matrix[r][i]);
- }
- // increase r by one because first row printed
- r++;
- // print last column
- for (i = r; i < row; i++) {
- result.add(matrix[i][col - 1]);
- }
- // decrease col by one because last column has been printed
- col--;
- // print rows from last except printed elements
- if (r < row) {
- for (i = col - 1; i >= c; i--) {
- result.add(matrix[row - 1][i]);
- }
- row--;
- }
- // print columns from first except printed elements
- if (c < col) {
- for (i = row - 1; i >= r; i--) {
- result.add(matrix[i][c]);
- }
- c++;
- }
- }
- return result;
- }
-}
diff --git a/src/test/java/com/thealgorithms/matrix/PrintAMatrixInSpiralOrderTest.java b/src/test/java/com/thealgorithms/matrix/PrintAMatrixInSpiralOrderTest.java
new file mode 100644
index 000000000000..745fdf98f193
--- /dev/null
+++ b/src/test/java/com/thealgorithms/matrix/PrintAMatrixInSpiralOrderTest.java
@@ -0,0 +1,83 @@
+package com.thealgorithms.matrix;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+import org.junit.jupiter.api.Test;
+
+class PrintAMatrixInSpiralOrderTest {
+
+ private final PrintAMatrixInSpiralOrder spiralPrinter = new PrintAMatrixInSpiralOrder();
+
+ @Test
+ void testSquareMatrix() {
+ int[][] matrix = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
+ List expected = Arrays.asList(1, 2, 3, 6, 9, 8, 7, 4, 5);
+ assertEquals(expected, spiralPrinter.print(matrix, 3, 3));
+ }
+
+ @Test
+ void testRectangularMatrixMoreRows() {
+ int[][] matrix = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}, {10, 11, 12}};
+ List expected = Arrays.asList(1, 2, 3, 6, 9, 12, 11, 10, 7, 4, 5, 8);
+ assertEquals(expected, spiralPrinter.print(matrix, 4, 3));
+ }
+
+ @Test
+ void testRectangularMatrixMoreCols() {
+ int[][] matrix = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}};
+ List expected = Arrays.asList(1, 2, 3, 4, 8, 12, 11, 10, 9, 5, 6, 7);
+ assertEquals(expected, spiralPrinter.print(matrix, 3, 4));
+ }
+
+ @Test
+ void testSingleRow() {
+ int[][] matrix = {{1, 2, 3, 4}};
+ List expected = Arrays.asList(1, 2, 3, 4);
+ assertEquals(expected, spiralPrinter.print(matrix, 1, 4));
+ }
+
+ @Test
+ void testSingleColumn() {
+ int[][] matrix = {{1}, {2}, {3}};
+ List expected = Arrays.asList(1, 2, 3);
+ assertEquals(expected, spiralPrinter.print(matrix, 3, 1));
+ }
+
+ @Test
+ void testEmptyMatrix() {
+ int[][] matrix = new int[0][0];
+ List expected = Collections.emptyList();
+ assertEquals(expected, spiralPrinter.print(matrix, 0, 0));
+ }
+
+ @Test
+ void testOneElementMatrix() {
+ int[][] matrix = {{42}};
+ List expected = Collections.singletonList(42);
+ assertEquals(expected, spiralPrinter.print(matrix, 1, 1));
+ }
+
+ @Test
+ void testMatrixWithNegativeNumbers() {
+ int[][] matrix = {{-1, -2}, {-3, -4}};
+ List expected = Arrays.asList(-1, -2, -4, -3);
+ assertEquals(expected, spiralPrinter.print(matrix, 2, 2));
+ }
+
+ @Test
+ void testLargeSquareMatrix() {
+ int[][] matrix = {{3, 4, 5, 6, 7}, {8, 9, 10, 11, 12}, {14, 15, 16, 17, 18}, {23, 24, 25, 26, 27}, {30, 31, 32, 33, 34}};
+ List expected = Arrays.asList(3, 4, 5, 6, 7, 12, 18, 27, 34, 33, 32, 31, 30, 23, 14, 8, 9, 10, 11, 17, 26, 25, 24, 15, 16);
+ assertEquals(expected, spiralPrinter.print(matrix, 5, 5));
+ }
+
+ @Test
+ void testSingleRowWithTwoElements() {
+ int[][] matrix = {{2, 2}};
+ List expected = Arrays.asList(2, 2);
+ assertEquals(expected, spiralPrinter.print(matrix, 1, 2));
+ }
+}
diff --git a/src/test/java/com/thealgorithms/matrix/TestPrintMatrixInSpiralOrder.java b/src/test/java/com/thealgorithms/matrix/TestPrintMatrixInSpiralOrder.java
deleted file mode 100644
index bb415a5861a8..000000000000
--- a/src/test/java/com/thealgorithms/matrix/TestPrintMatrixInSpiralOrder.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package com.thealgorithms.matrix;
-
-import static org.junit.jupiter.api.Assertions.assertIterableEquals;
-
-import java.util.List;
-import org.junit.jupiter.api.Test;
-
-public class TestPrintMatrixInSpiralOrder {
- @Test
- public void testOne() {
- int[][] matrix = {{3, 4, 5, 6, 7}, {8, 9, 10, 11, 12}, {14, 15, 16, 17, 18}, {23, 24, 25, 26, 27}, {30, 31, 32, 33, 34}};
- var printClass = new PrintAMatrixInSpiralOrder();
- List res = printClass.print(matrix, matrix.length, matrix[0].length);
- List list = List.of(3, 4, 5, 6, 7, 12, 18, 27, 34, 33, 32, 31, 30, 23, 14, 8, 9, 10, 11, 17, 26, 25, 24, 15, 16);
- assertIterableEquals(res, list);
- }
-
- @Test
- public void testTwo() {
- int[][] matrix = {{2, 2}};
- var printClass = new PrintAMatrixInSpiralOrder();
- List res = printClass.print(matrix, matrix.length, matrix[0].length);
- List list = List.of(2, 2);
- assertIterableEquals(res, list);
- }
-}
diff --git a/src/test/java/com/thealgorithms/others/TestPrintMatrixInSpiralOrder.java b/src/test/java/com/thealgorithms/others/TestPrintMatrixInSpiralOrder.java
deleted file mode 100644
index d35d4bb60c73..000000000000
--- a/src/test/java/com/thealgorithms/others/TestPrintMatrixInSpiralOrder.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package com.thealgorithms.others;
-
-import static org.junit.jupiter.api.Assertions.assertIterableEquals;
-
-import java.util.List;
-import org.junit.jupiter.api.Test;
-
-public class TestPrintMatrixInSpiralOrder {
- @Test
- public void testOne() {
- int[][] matrix = {{3, 4, 5, 6, 7}, {8, 9, 10, 11, 12}, {14, 15, 16, 17, 18}, {23, 24, 25, 26, 27}, {30, 31, 32, 33, 34}};
- var printClass = new PrintAMatrixInSpiralOrder();
- List res = printClass.print(matrix, matrix.length, matrix[0].length);
- List list = List.of(3, 4, 5, 6, 7, 12, 18, 27, 34, 33, 32, 31, 30, 23, 14, 8, 9, 10, 11, 17, 26, 25, 24, 15, 16);
- assertIterableEquals(res, list);
- }
-
- @Test
- public void testTwo() {
- int[][] matrix = {{2, 2}};
- var printClass = new PrintAMatrixInSpiralOrder();
- List res = printClass.print(matrix, matrix.length, matrix[0].length);
- List list = List.of(2, 2);
- assertIterableEquals(res, list);
- }
-}