public int[][] createSolution(int[][] game, int index) { //requires 2d array and index to be passed into
        if (index > 80) {
            /*FOR DEBUGGING PURPOSES ONLY
            //displays the solution
            for (int j = 0; j < game.length; j++) {
                for (int k = 0; k < game[j].length; k++) {
                    System.out.print(game[j][k] + " ");
                }
                System.out.println();
            }
            System.out.println();
            */
            return game; //return a successfully created game and exit method
        }
        
        //declare variables
        int x = index % 9; //remainder is used to move to next gamecell
        int y = index / 9; //index should not go beyond 8
        int i = 1;
        
        List<Integer> listOfNumbers = new ArrayList<Integer>(); //create a new List of integers
        //loop through numbers 1 - 9 and add them to the List
        while (i <= 9) {
            listOfNumbers.add(i);
            i++;
        }
        
        //shuffle the list of numbers
        Collections.shuffle(listOfNumbers);
        
        //loop through numbers and add them to game array
        while (listOfNumbers.size() > 0) {
            int num = getNextValidNumber(game, x, y, listOfNumbers);
            if (num == -1)
                //return null value because no valid number was returned from getNextValidNumber function
                return null; 
            
            game[y][x] = num; //assign valid number to game array
            
            //rerun this method using tmpArray[][] to continue build out game array
            //increase the index by 1
           int[][] tmpArray = createSolution(game, index + 1);
           
           //return tmpArray if it contains a value
           if (tmpArray != null)
               return tmpArray;
           
           game[y][x] = 0;
        }
        return null; //should not be reached, but this is required for function
    }