Я изучаю стеки, написав программу, которая проверяет синтаксис скобок. Если я нахожу (Baller)
, он должен дать мне положительный результат. Если у меня есть (Baller()
, он должен дать мне отрицательный результат. По сути, приложение проверяет правильность использования пользователя(), {} и [].Если else vs switch with stack logic
- Если я встречаю ({или [персонаж я добавлю его в символ в стеке.
- Если я встречаю)}] знак я удалить символ из стека.
- Если текст содержит нечетное число скобок или скобки не являются смежными (например, (и] не является непрерывным), ошибка
сообщение об распечатывается.
Так что я сделал это половина . в случае еще заявление, но я подумал, что это должно быть легче сделать это в распределительном заявление, а также быть хороший опыт обучения
Так что я сделал в заявлении выключателя заключается в следующем:
public class Input {
public static void main(String[] args) {
Stack stack = new Stack();
String str;
str = JOptionPane.showInputDialog("Text to parse: ");
char arr[] = str.toCharArray();
System.out.print(str);
System.out.println();
System.out.println();
for(char c : arr) {
switch(c) {
case '{':
stack.Push(c);
System.out.print(stack.firstNode.getData());
break;
case '(':
stack.Push(c);
System.out.print(stack.firstNode.getData());
break;
case '[':
stack.Push(c);
System.out.print(stack.firstNode.getData());
break;
case '}':
c = (Character) stack.Peek(); //<-- Edited for @Jimmy
if(c != '{') {
System.out.println(" Syntax ERROR");
}
case ']':
if(c != '[') {
System.out.println(" Syntax ERROR");
}
case ')':
if(c != '(') {
System.out.println(" Syntax ERROR");
}
}
}
}
}
Но теперь у меня проблема: если я просто добавлю правую боковую панель, она просто удалит, потому что у меня есть поп. Я попытался сделать это в если-то еще заявление, которое закончится в заявлении, если-как это:
if(first == '(' && (current == '}' || current == ']')) {
if first == '{' && (current == ']' || current == ')')) {
//and so on
Как я могу превратить это в случае переключения? Это плохая идея?
Я знаю, что на моей левой боковой панели нет проблем, но есть правильные.
EDIT: Как выглядит код ПРЯМО СЕЙЧАС
import javax.swing.JOptionPane;
public class Input {
public static void main(String[] args) {
Stack stack = new Stack();
String str;
str = JOptionPane.showInputDialog("Text to parse: ");
char arr[] = str.toCharArray();
System.out.print(str);
System.out.println();
System.out.println();
for(char c : arr) {
switch(c) {
case '{':
stack.Push(c);
break;
case '(':
stack.Push(c);
break;
case '[':
stack.Push(c);
break;
case '}':
if(stack.isEmpty() || (Character) stack.Pop() != '{') {
System.out.println(" Syntax ERROR");
}
break;
case ']':
if(stack.isEmpty() || (Character) stack.Pop() != '[') {
System.out.println(" Syntax ERROR");
}
break;
case ')':
if(stack.isEmpty() || (Character) stack.Pop() != '(') {
System.out.println(" Syntax ERROR");
}
break;
}
} if(!stack.isEmpty()) {
System.out.println(" Syntax ERROR");
}
}
}
вы можете использовать peek(), который просто позволит вам увидеть последнее содержимое стека. Если нет ошибки, вы можете вызвать pop(), иначе не вызывать поп, и он не будет удален. – Jimmy
@Jimmy Не могли бы вы привести пример, как он будет работать в коде? В противном случае, где вы хотели изменить? – Thrillofit123
что-то вроде этого в вашем первом случае удаления .i.e для случая '}': 'c = (Character) stack.Peek(); if (c! = '{') { System.out.println ("Синтаксис ERROR"); } else stack.Pop(); ' – Jimmy