01/10/2018, 15:39
Cách tính của && và ||
while (T.level(s.peek().charAt(0)) >= T.level(c) && !s.isEmpty() ) {
s1 += s.peek();
s.pop();
}
Trong đoạn code này khi mình để !s.isEmpty thì code báo lỗi còn để lên trước thì lại không bị lỗi. Đây là lỗi:
Exception in thread “main” java.util.EmptyStackException
** at java.util.Stack.peek(Unknown Source)**
** at spoj.Transform_The_Expression.Postfix(Transform_The_Expression.java:50)**
** at spoj.Transform_The_Expression.main(Transform_The_Expression.java:70)**
Bài liên quan
Khi kết quả đã ngã ngũ thì
&&
và||
đều thoát sau khi tính toán hạng thứ nhất. (gọi là short-circuit evaluation) Vì vậy toán hạng 1 phải có isEmpty mới đúng.Nghĩa là sao mình chưa hiểu lắm
Đầu tiên bạn coi thứ tự thực hiện phép so sánh của && và ||.
&& và || đều thực hiện phép so sánh từ trái qua phải.
Biểu thức
(T.level(s.peek().charAt(0)) >= T.level(c) && !s.isEmpty() )
sẽ bị Exception khi giá trị của biến s là empty vì biểu thức T.level(s.peek().charAt(0)) >= T.level© sẽ thực hiện trước.