Нельзя удалять операторы из очереди из одной очереди в другую, проверяя, является ли character оператором с помощью логического метода, использующего switch

#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 код не может работать!