Binary search in Java
I'll only be reviewing the binary search portion of the code since that's what it seems like you're asking for.

Separation of Concerns

You should separate I/O from processing and let the user control what kind of I/O they'd like to have. So I would remove the output statements from your binarySearch function and find a better way to indicate the element was not found. The solution I'll go with is that we'll return the index of the element if it is found and -1 otherwise (since -1 is never a valid array index).

Better Naming

You call the middle element guess even though it is not a guess. Someone unfamiliar with binary search would read this code and assume that you guessed the element was in the middle. This is not true so I would rename that variable to pivot or middle. Moreover, you can move the calculation of it to be inside the while loop.

Miscellaneous


Use consistent bracing style (e.g. always use them. They never hurt).
The if statement at the end of the binary search is unnecessary since when we exit the while loop, we know that low &gt; high.
Since middle won't be changing in one while loop cycle, we can mark it final.


Here is a possible implementation taking into account all of the above.

    private static int binarySearch(int[] array, int searchkey) {

        int low = 0; // lowest index
        int high = array.length - 1; // highest index

        while (low &lt;= high) {
            final int middle = low + (high - low) / 2;
            if (array[middle] == searchkey) {
                return middle;
            } else if (array[middle] &lt; searchkey) {
                low = middle + 1;
            } else {
                high = middle - 1;
            }
        }
        return -1;
    }