2013-05-21 66 views
3

我發現PowerScript's CHOOSE CASE聲明非常有用,因爲它使代碼比許多if s和else if s更清晰。是否存在PowerScript「CHOOSE CASE」的Java等價物?

這裏的它是如何工作的,從上面的鏈接一個例子:

CHOOSE CASE weight 
    CASE IS < 16 
     Postage=Weight*0.30 
     Method="USPS" 
    CASE 16 to 48 
     Postage=4.50 
     Method="UPS" 
    CASE ELSE 
     Postage=25.00 
     Method="FedEx" 
END CHOOSE 

一個CASE 5 to 11相同CASE 5, 6, 7, 8, 9, 10, 11

注意,CHOOSE CASE不等同於Java的switch

+0

號http://stackoverflow.com/questions/16534025/switch-case-logical -expression-statement-in-java-versus-js-or-php/16534063#16534063 –

回答

4

如果你的目標是清理決策點,你可以封裝是決定什麼情況下,從使用這一決定,如代碼分別應用代碼:

enum WeightClass { LOW, MEDIUM, HIGH }; 

public WeightClass determineWeightClass(int weight) 
{ 
    return (weight < 16) 
     ? WeightClass.LOW 
     : (weight <= 48 
      ? WeightClass.MEDIUM 
      : WeightClass.HIGH); 
} 

,並在決策點:

switch(determineWeightClass(weight)) 
{ 
    case LOW: 
     ... 
     break; 
    case MEDIUM: 
     ... 
     break; 
    case HIGH: 
     ... 
     break; 
} 
+0

雖然這不像CHOOSE CASE那樣乾淨,但它的代碼可讀性非常好 –

3

不一模一樣。如果你想在Java中實現這樣的片段,你必須使用if-else[-if]語句。

基本上,它應該是這樣的:

if (weight < 16) { 
    //something 
} else if (weight >= 16 && weight <= 48) { 
    //something else 
} else { 
    //some other thing 
} 

希望它爲你工作。 :)

0

不需要。您將不得不使用一系列if-elseif-else語句。

5

在Java中,您可以使用多個case語句,但沒有指定一個表達式的情況下預選賽,只是文字的好方法:

switch(weight) { 
    case 1: 
    case 2: 
    case 3: 
    postage = weight * 0.30; 
    method = "USPS"; 
    break; 
    case 4: 
    case 5: 
    case 6: 
    postage = 4.5; 
    method = "UPS"; 
    break; 
    default: 
    postage = 25.0; 
    method = "FedEx"; 
    break; 
} 

要得到很好的範圍,堅持如果/其他:

if(weight > 0 && weight <= 3) { 
    postage = weight * 0.30; 
    method = "USPS"; 
} 
else if(weight > 3 && weight <= 6) { 
    postage = 4.5; 
    method = "UPS"; 
} 
else { 
    postage = 25.0; 
    method = "FedEx"; 
} 
+0

+1很好的答案,但我一直在爲這個邏輯尋找更可讀的代碼。 –

2

如果只有3例,一系列的if/else是罰款。如果你有很多的條件下,你可以使用導航地圖和夫婦它枚舉了一個很好的和光滑的設計:

public class Test1 { 

    public static void main(String[] args) { 
     printDelivery(0); 
     printDelivery(5); 
     printDelivery(16); 
     printDelivery(48); 
     printDelivery(50); 
    } 

    private static void printDelivery(int weight) { 
     Delivery d = Delivery.getDelivery(weight); 
     System.out.println("Weight: " + weight + " => $" + d.getPostage(weight) + " with " + d.getMethod()); 
    } 

    static enum Delivery { 
     LOW_WEIGHT(15) { 
      public double getPostage(int weight) { return 0.3 * weight; } 
      public String getMethod() { return "USPS"; } 
     }, MEDIUM_WEIGHT(47) { 
      public double getPostage(int weight) { return 4.5; } 
      public String getMethod() { return "UPS"; } 
     }, HIGH_WEIGHT(Integer.MAX_VALUE){ 
      public double getPostage(int weight) { return 25.0; } 
      public String getMethod() { return "FedEx"; } 
     }; 
     private static final NavigableMap<Integer, Delivery> deliveries = new TreeMap<>(); 
     static { 
      for (Delivery e : values()) { 
       deliveries.put(e.maxWeight, e); 
      } 
     } 
     private final int maxWeight; 
     Delivery(int maxWeight) { 
      this.maxWeight = maxWeight; 
     } 
     public static Delivery getDelivery(int weight) { 
      return deliveries.ceilingEntry(weight).getValue(); 
     } 

     abstract double getPostage(int weight); 
     abstract String getMethod(); 
    } 
} 
相關問題