public class TwoDArrays {
    public static void main(String[] args) {

        // Let's come up with 3 ways to make a 2D array with the
        // following entries:
        // 3 rows, 4 columns
        // col#1 col#2 col#3 col#4
        // row#1 1 2 3 4
        // row#2 5 6 7 8
        // row#3 9 10 11 12
        int numCols = 4;
        int numRows = 3;

        int[][] arr1 = {{1, 2, 3, 4},
                        {5, 6, 7, 8},
                        {9, 10, 11, 12}
        };

        int[][] arr2 = new int[numRows][numCols];
        arr2[0][0] = 1;
        arr2[0][1] = 2;
        arr2[0][2] = 3;
        arr2[0][3] = 4;
        arr2[1][0] = 5;
        arr2[1][1] = 6;
        arr2[1][2] = 7;
        arr2[1][3] = 8;
        arr2[2][0] = 9;
        arr2[2][1] = 10;
        arr2[2][2] = 11;
        arr2[2][3] = 12;

        int[][] arr3 = new int[numRows][];

        int counter = 1;
        for (int i = 0; i < numRows; i++) {
            arr3[i] = new int[numCols];
            for (int j = 0; j < numCols; j++) {
                arr3[i][j] = counter;
                counter++;
            }
        }

        printArray(arr3);
        System.out.println(findLargest(arr3));
    }

    // given a 2D array of ints, print out each element in its
    // proper row and column
    public static void printArray(int[][] input) {
        for (int i = 0; i < input.length; i++) {
            for (int j = 0; j < input[i].length; j++) {
                System.out.print(input[i][j] + " ");
            }
            System.out.println();
        }
    }

    // find the largest value in a 2D array of ints
    public static int findLargest(int[][] input) {
        int largest = Integer.MIN_VALUE;
        for (int i = 0; i < input.length; i++) {
            for (int j = 0; j < input[i].length; j++) {
                if (input[i][j] > largest) {
                    largest = input[i][j];
                }
            }
        }

        return largest;
    }

}
