-4
/** Test if delimiters in the given expression are properly matched. */
public static boolean isMatched(String expression) {
final String opening = "({["; // opening delimiters
final String closing = ")}]"; // respective closing delimiters
Stack<Character> buffer = new LinkedStack<>();
for (char c:expression.toCharArray()) {
if (opening.indexOf(c) != -1) // this is a left delimiter
buffer.push(c);
else if (closing.indexOf(c) != -1) { // this is a right delimiter
if (buffer.isEmpty()) // nothing to match with
return false;
if (closing.indexOf(c) != opening.indexOf(buffer.pop()))
return false; // mismatched delimiter
}
}
return buffer.isEmpty(); // were all opening delimiters matched?
}
- Предположим, общий интерфейс стека,
Stack<E>
с невыполненных методами:push(E)
,pop()
,isEmpty()
гдеE
представляет собой общий тип данных. - И
LinkedArray<E>
класс, реализующий все методыStacks<E>
. - 'expression' in 'isMatched()' - математическое выражение с фигурными скобками в качестве разделителей. Ex-
[{(a+b)*(c+d)}]
; и isMatched(String expression)
- это метод проверки правильности парного сопряжения в выражении.buffer
- это стек, в котором хранятся нажатые выражения (теперь массив изchar
).
Я могу понять код до каждого цикла. И линии после этого едят меня.Пожалуйста, объясните мне этот код Разделитель согласования с стеки
Не вставлять ссылку на * изображение * кода. Вставьте код в вопрос. – Andreas
Если строка 'if (opening.indexOf (c)! = -1)' ест вас, тогда, может быть, вам следует ** прочитать javadoc ** ['String.indexOf (char)'] (https: // docs.oracle.com/javase/7/docs/api/java/lang/String.html#indexOf(int)), чтобы узнать, что он делает и что означает возвращаемое значение '-1'. Я имею в виду, что код в цикле делает * обширным * использование 'indexOf()', поэтому, если вы не понимаете, что он делает, неудивительно, что вы едите. – Andreas
Я использую небольшой мобильный телефон. Поэтому его трудно ввести коды со всеми этими отступами. –