0
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 行开始。

4

1 回答 1

0

c您的问题在于在第二次执行之前未重置的变量。

如果您退出第一个“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);
    }
}
于 2016-10-05T18:38:55.850 回答