From 642bff3077f7d4721879941e07aa5cabda6c93b2 Mon Sep 17 00:00:00 2001
From: Shubhra <shubhi.srvstv@gmail.com>
Date: Sun, 3 Jun 2018 17:22:10 +0530
Subject: [PATCH] BAEL-1761 Jagged Arrays In Java

---
 .../java/com/baeldung/array/JaggedArray.java  | 49 +++++++++++++++++
 .../com/baeldung/array/JaggedArrayTest.java   | 53 +++++++++++++++++++
 2 files changed, 102 insertions(+)
 create mode 100644 core-java/src/main/java/com/baeldung/array/JaggedArray.java
 create mode 100644 core-java/src/test/java/com/baeldung/array/JaggedArrayTest.java

diff --git a/core-java/src/main/java/com/baeldung/array/JaggedArray.java b/core-java/src/main/java/com/baeldung/array/JaggedArray.java
new file mode 100644
index 0000000000..36cfc88b95
--- /dev/null
+++ b/core-java/src/main/java/com/baeldung/array/JaggedArray.java
@@ -0,0 +1,49 @@
+package com.baeldung.array;
+
+import java.util.Arrays;
+import java.util.Scanner;
+
+public class JaggedArray {
+
+    int[][] shortHandFormInitialization() {
+        int[][] jaggedArr = { { 1, 2 }, { 3, 4, 5 }, { 6, 7, 8, 9 } };
+        return jaggedArr;
+    }
+
+    int[][] declarationAndThenInitialization() {
+        int[][] jaggedArr = new int[3][];
+        jaggedArr[0] = new int[] { 1, 2 };
+        jaggedArr[1] = new int[] { 3, 4, 5 };
+        jaggedArr[2] = new int[] { 6, 7, 8, 9 };
+        return jaggedArr;
+    }
+
+    int[][] declarationAndThenInitializationUsingUserInputs() {
+        int[][] jaggedArr = new int[3][];
+        jaggedArr[0] = new int[2];
+        jaggedArr[1] = new int[3];
+        jaggedArr[2] = new int[4];
+        initializeElements(jaggedArr);
+        return jaggedArr;
+    }
+
+    void initializeElements(int[][] jaggedArr) {
+        Scanner sc = new Scanner(System.in);
+        for (int outer = 0; outer < jaggedArr.length; outer++) {
+            for (int inner = 0; inner < jaggedArr[outer].length; inner++) {
+                jaggedArr[outer][inner] = sc.nextInt();
+            }
+        }
+    }
+
+    void printElements(int[][] jaggedArr) {
+        for (int index = 0; index < jaggedArr.length; index++) {
+            System.out.println(Arrays.toString(jaggedArr[index]));
+        }
+    }
+
+    int[] getElementAtGivenIndex(int[][] jaggedArr, int index) {
+        return jaggedArr[index];
+    }
+
+}
diff --git a/core-java/src/test/java/com/baeldung/array/JaggedArrayTest.java b/core-java/src/test/java/com/baeldung/array/JaggedArrayTest.java
new file mode 100644
index 0000000000..b67dfc9600
--- /dev/null
+++ b/core-java/src/test/java/com/baeldung/array/JaggedArrayTest.java
@@ -0,0 +1,53 @@
+package com.baeldung.array;
+
+import static org.junit.Assert.assertArrayEquals;
+import static org.junit.Assert.assertEquals;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.InputStream;
+import java.io.PrintStream;
+
+import org.junit.Test;
+
+public class JaggedArrayTest {
+
+    private JaggedArray obj = new JaggedArray();
+
+    @Test
+    public void whenInitializedUsingShortHandForm_thenCorrect() {
+        assertArrayEquals(new int[][] { { 1, 2 }, { 3, 4, 5 }, { 6, 7, 8, 9 } }, obj.shortHandFormInitialization());
+    }
+
+    @Test
+    public void whenInitializedWithDeclarationAndThenInitalization_thenCorrect() {
+        assertArrayEquals(new int[][] { { 1, 2 }, { 3, 4, 5 }, { 6, 7, 8, 9 } }, obj.declarationAndThenInitialization());
+    }
+
+    @Test
+    public void whenInitializedWithDeclarationAndThenInitalizationUsingUserInputs_thenCorrect() {
+        InputStream is = new ByteArrayInputStream("1 2 3 4 5 6 7 8 9".getBytes());
+        System.setIn(is);
+        assertArrayEquals(new int[][] { { 1, 2 }, { 3, 4, 5 }, { 6, 7, 8, 9 } }, obj.declarationAndThenInitializationUsingUserInputs());
+        System.setIn(System.in);
+    }
+
+    @Test
+    public void givenJaggedArrayAndAnIndex_thenReturnArrayAtGivenIndex() {
+        int[][] jaggedArr = { { 1, 2 }, { 3, 4, 5 }, { 6, 7, 8, 9 } };
+        assertArrayEquals(new int[] { 1, 2 }, obj.getElementAtGivenIndex(jaggedArr, 0));
+        assertArrayEquals(new int[] { 3, 4, 5 }, obj.getElementAtGivenIndex(jaggedArr, 1));
+        assertArrayEquals(new int[] { 6, 7, 8, 9 }, obj.getElementAtGivenIndex(jaggedArr, 2));
+    }
+
+    @Test
+    public void givenJaggedArray_whenUsingArraysAPI_thenVerifyPrintedElements() {
+        int[][] jaggedArr = { { 1, 2 }, { 3, 4, 5 }, { 6, 7, 8, 9 } };
+        ByteArrayOutputStream outContent = new ByteArrayOutputStream();
+        System.setOut(new PrintStream(outContent));
+        obj.printElements(jaggedArr);
+        assertEquals("[1, 2]\n[3, 4, 5]\n[6, 7, 8, 9]\n", outContent.toString());
+        System.setOut(System.out);
+    }
+
+}