Я пытаюсь проверить, сбалансировано ли выражение в терминах его круглых скобок, моя программа должна выводить соответствующие сообщения следующим образом: (Я читаю выражение из файла)Проверка того, сбалансировано ли выражение в терминах скобников
Если для каждого «)» есть «(» то это сбалансировано. Если есть «)» без «(» тогда левых скобок не хватает, и так далее.
я выработал код для случая «(A + B)», и он печатает сбалансированный, но для случая «(A + B))» он печатает «Сбалансированные и левые», и я не могу понять, что проблема
вот код: (EDIT: Я разработал его как метод, он отлично работает, когда выражение сбалансировано и когда правая скобка отсутствует, но если левая отсутствует, выдается «сбалансированная»). Проблема когда он имеет отсутствующую левую скобку, возвращенный стек пуст, поэтому он печатает «сбалансированный». Я действительно не знаю, как исправить этот случай!
public static Stack isBalanced(String str) {
Stack s = new Stack();
char temp;
for (int i = 0; i < str.length(); i++) {
if (str.charAt(i) == '(') {
s.push(str.charAt(i));
} else if (str.charAt(i) == ')') {
if (!s.isEmpty()) {
temp = (char) s.pop();
}
}
}
return s;
}
Что вам удалось сделать с помощью отладчика? –
@ RossDrew - рассмотрите, пожалуйста, вопрос об устранении вашего ответа. Конечно, это не идеально, но его легко исправить. –
Отладчик - ваш друг, но ... вы увидите, что вы повторите свои проверки для своего персонажа. Сначала «)» будет печатать «сбалансированный», второй будет печатать «left missing». Сделайте эту проверку НА КОНЕЦ. В цикле вам просто нужно их подсчитать (+1 для "(" и -1 для ")"). ** Результат этого счета должен быть равен нулю, а во время цикла он не может быть <0. ** –