2012-10-19 30 views
7

Tôi có nhiều trường hợp trong một công tắc mà làm điều tương tự, như vậy: (điều này được viết bằng Java)Tránh chuyển đổi dự phòng khi nhiều trường hợp làm điều tương tự?

case 1: 
    aMethod(); 
    break; 
case 2: 
    aMethod(); 
    break; 
case 3: 
    aMethod(); 
    break; 
case 4: 
    anotherMethod(); 
    break; 

Có cách nào tôi có thể kết hợp các trường hợp 1, 2 và 3 vào một trường hợp, kể từ tất cả họ đều gọi cùng một phương pháp?

Trả lời

14
case 1: 
case 2: 
case 3: 
    aMethod(); 
    break; 
case 4: 
    anotherMethod(); 
    break; 

này hoạt động bởi vì khi nó xảy ra là trường hợp 1 (ví dụ), nó rơi qua cho trường hợp 2 (không có tuyên bố break), sau đó rơi qua cho trường hợp 3.

4

Chắc chắn, bạn có thể cho phép case phần khoản 1 & 2 đến 'mùa thu qua' quy định tại khoản 3 và sau đó break ra khỏi tuyên bố switch sau đó:

case 1: 
case 2: 
case 3: 
    aMethod(); 
    break; 
case 4: 
    anotherMethod(); 
    break; 
+0

gì nếu 3 và 4 có một số phần phổ biến, nhưng 4 làm một số công cụ thêm –

+0

Trong trường hợp đó bạn có thể cho 3 "mùa thu qua" 4. Câu hỏi ở đây chỉ ra rằng 3 và 4 không có chức năng chia sẻ – Reimeus

+0

Vâng, không, bạn không thể để 3 rơi qua 4. Trong trường hợp đó, bất cứ điều gì được thực hiện cho trường hợp 4 sẽ luôn luôn được thực hiện cho trường hợp 3 là tốt và nó sẽ là 3 mà sẽ được làm những thứ thêm (trước khi rơi qua). Sử dụng 'chuyển đổi', bạn chỉ có thể thực hiện công cụ bổ sung _before_ công cụ phổ biến. Nếu bạn muốn logic khác, bạn cần phải sử dụng các cấu trúc điều khiển khác (hoặc 'if' câu lệnh lồng trong các trường hợp chuyển đổi, mà tôi thấy xấu xí). –

3

Dưới đây là tốt nhất bạn có thể làm

case 1: 
case 2: 
case 3: 
    aMethod(); 
    break; 
case 4: 
    anotherMethod(); 
    break; 
3

Nó được gọi là "lọt qua" mẫu:

case 1: // fall through 
case 2: // fall through 
case 3: 
    aMethod(); 
    break; 
case 4: 
    anotherMethod(); 
    break; 
Các vấn đề liên quan