Simple exercice representing a slidepuzzle
System.out.println("Enter height (&gt;0)");

        int height = sc.nextInt();


This pattern repeats itself several times in your code. Turn it into a method, e.g. (assuming the Scanner is turned into a static field):

private static int promptForInt(String message) {
    System.out.println(message);
    return sc.nextInt();
}


-

    public static int getRandomInteger(){

        Random randomGenerator = new Random();

        return randomGenerator.nextInt(99) + 1;
    }


Creating a new Random for each call makes no sense from a performance perspective. The object should be created exactly once.

    public static void populatePuzzle( int[][] puzzle ){

    public static void displayPuzzle( int[][] puzzle ){

    public static void placeMissingPiece( int elementNumber, int[][] puzzle ){


You're not thinking object-oriented here. The above pattern is a really obvious indication that each method should belong to a Puzzle class. That way your main method can concern itself with the core logic of your program instead of the implementation details of the puzzle. E.g.:

Puzzle puzzle = new Puzzle(); // .populate() should probably be called from the constructor
// ...
puzzle.placeMissingPiece(position);
// ...
puzzle.display();
// ...
puzzle.swapElementValues(0, number); // findNumber() called as a private method
// etc...