2016-10-05 1 views
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, то в то время как характер ISN 't a #, он должен деинсталлироваться из q1, пока символ не является оператором и помещает его в q2. Однако ни один из моих операторов из q1 не выгружается и не ставится в очередь на q2, что должно происходить из строк 20-23.Не удается из очереди операторов из одной очереди в другую, проверяя, если символ является оператором через булевой метод, который использует переключатель

ответ

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); 
    } 
} 
+0

Я не думаю, что помогает, так как я епдиеие # в начале кода. – tbadam

+0

Вы пробовали? Вы проверяете 'c' не q1 в условии! – granmirupa

+0

Да, он все еще печатает результат, и все это остается в q1. – tbadam