#java #stack #queue #infix-notation #postfix
#java #стек #очередь #инфиксная нотация #postfix-mta
Вопрос:
import java.util.Scanner;
public class Tester {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
char c = 'x';
Queue q1 = new Queue();
Stack s1 = new Stack();
s1.push('#');
Queue q2 = new Queue();
q1.enqueue('#');
while (c != '#') {
System.out.println("Enter a character: ");
c = input.next().charAt(0);
q1.enqueue(c);
}
while (c != '#') {
c = (char) q1.dequeue();
if (!operator(c)) {
q2.enqueue(c);
}
}
q1.print(q1);
System.out.println();
q2.print(q2);
}
public static boolean operator(char c) {
char op = 'x';
boolean isOperator;
switch (op) {
case '*':
case '/':
case '^':
case ' ':
case '-':
isOperator = true;
break;
default:
isOperator = false;
break;
}
return isOperator;
}
}
Цель для меня состоит в том, чтобы ввести некоторые символы в очередь q1, затем, пока символ не является #, он должен удаляться из очереди из q1, если символ не является оператором, и помещать его в очередь q2.
Однако ни один из моих операторов из q1 не выводится из очереди и не помещается в очередь в q2, что должно происходить со строк 20-23.
Ответ №1:
Ваша проблема заключается в переменной c
, которая не сбрасывается перед выполнением второго while .
Если вы выйдете из первого цикла ‘while’, c
будет установлено значение ‘#’, и вы не перейдете во второй цикл.
Попробуйте это:
while (c != '#') {
System.out.println("Enter a character: ");
c = input.next().charAt(0);
q1.enqueue(c);
}
c = 'a'
while (c != '#') {
c = (char) q1.dequeue();
if (!operator(c)) {
q2.enqueue(c);
}
}
Комментарии:
1. Я не думаю, что это помогает, поскольку я ставлю в очередь # в начале кода.
2. Вы пробовали? Вы проверяете ‘c’, а не q1 в условии!
3. Да, он все равно печатает результат, и все это остается в q1.
4. Хорошо, я думаю, что я это понимаю.. отправит сообщение обратно, когда вернется с работы.
5. Проблема, возможно, в вашей реализации enqueue . Проблема в этом коде была только в этом. Без установки c код не может работать!