Calculating pair combinations in Java
calculateCombinations

Your method does a lot of not required iterating. You only have to iterate up to x-1 in the outer loop as afterwards the if statement evaluates always to false (-> you can remove the number variable and thus the #combination call). The value of y and counter is the same on each iteration -> you can drop the counter variable.
The if statement can be removed by starting the inner loop at y+1.
The resulting code would look something like:

public static void calculateCombinations(int x) {
    int y = 0;
    while (y &lt; x - 1) {
        y++;
        for (int i = y + 1; i &lt;= x; i++) {
            System.out.println(y + " -- " + i);
        }
    }
}


This can be written with two for loops to keep the code shorter:

public static void calculateCombinations(int x) {
    for (int i = 1; i &lt; x; i++)
        for (int j = i; ++j &lt;= x;)
            System.out.println(i + " -- " + j);
}


Besides that I would rename the method as it prints the combinations, with the current name I would assume that the method returns the combinations.

permutation

This method is effectively a recursively written loop that returns the product of the range [1,i] (=factorial, thus method should be renamed to factorial) and thus can be replaced with:

public static int permutation(int i) {
    // should add check for negative values
    int p = 1;
    for (; i &gt; 1; i--)
        p *= i;
    return p;
}


For O(1) performance you could precompute the factorials for values up to 12 (all factorials in int range).