Проблема со скобками)))))))?
Я не специалист по Java, но ответ - рекурсия.
Можно и без неё, с эмуляцией стека в массиве, но это по сути то же самое.
Это решает проблему огромной вложенности одинаковых циклов.
Также очень советую изучить формат RPN - он вам значительно упростит как перебор вариантов, так и вычисления. Например, ваш ответ (8-4) * (7-1) будет выглядеть, как массив 8, 4, -, 7, 1, -, *. Скобки исчезают. Задача сводится к перестановке 4 цифр в 7 позициях и перебору операций в оставшихся. Не все варианты валидны, но как именно оптимизировать, и надо ли оно вам или просто чтоб работало - решайте уже сами.
Я не специалист по Java, но ответ - python.from itertools import permutations, product
from operator import add, sub, mul, truediv

def f(data):
    oops, res = (add, sub, mul, truediv), {}
    sign = {add: '+', sub: '-', mul: '*', truediv: '/'}
    for t in permutations(data):
        for order in product([0, 1, 2], [0, 1], [0]):
            for ops in product(oops, repeat=3):
                try:
                    ll, ss = list(map(float, t)), list(map(str, t))
                    for i, op in zip(order, ops):
                        ll[i:i + 2] = [op(*ll[i:i + 2])]
                        ss[i:i + 2] = [f'({ss[i]}{sign[op]}{ss[i + 1]})']
                    if ll[0].is_integer():
                        res[int(ll[0])] = ss[0][1:-1]
                except ZeroDivisionError:
                    pass
    return res

for x, s in sorted(f([4, 1, 8, 7]).items()):
    print(f'{x:>4} : {s}')
Фрагмент вывода (там слишком много):20 : 7+(8+(1+4))
21 : 7*(8-(1+4))
22 : ((7/4)+1)*8
23 : ((7-4)*8)-1
24 : (7-1)*(8-4)
25 : ((7-4)*8)+1
26 : (8*4)-(7-1)
27 : (7*(8-4))-1
28 : 7*(8-(1*4))
29 : (7*(8-4))+1