Задачу можно трактовать по разному, а именно фраза "должен найти" Под этим подразумевается "жадный", или "нежадный" поиск? То есть должно найти одно вхождение, или все? Опять же "зеркальные слова" как должны находиться?
Метод detectAllWords должен найти все слова из words в массиве crossword.
UPD: Опять же объем поиска непонятен, каков размер матрицы? Тонкое место у меня в коде, так как я поставил всегд 10 возможных вхождений слова, сейчас переделаю... :))) Но все же. UPD: Переписал searchSymbol
public static int[][] searchSymbol(int symbol, int[][] cross){
    int count = 0;
    for (int[] ints : cross) {
        for (int anInt : ints) {
            if (anInt == symbol) {
                count++;
            }
        }
    }
    int[][] rez = new int[count + 1][2];
    count = 0;
    for(int i = 0; i < cross.length; i++){
        for(int j = 0 ; j < cross[i].length; j++){
            if(cross[i][j] == symbol) {
                rez[count][0] = i;
                rez[count][1] = j;
                count++;
            }
        }
    }
    rez[count][0] = -1;
    rez[count][1] = -1;
    return rez;
}