2015-11-03 36 views
-6

這段代碼似乎不起作用。我似乎無法弄清楚爲什麼它不是,但是當我運行它時,它似乎從選項中選擇一個隨機價格,而不是去掉實際的溫度。我也想知道是否會有更好的方法來實現我想要做的事情,而不是一個巨大的if-else階梯。謝謝如果 - 其他選擇隨機選項,而不是根據隨機生成的數字選擇

public static double GetPrice() 
{ 
    if (temp >= 0 && temp < 50) 
    { 
     price = 0.50; 
    } 
    else if (temp >= 50 && temp <= 60) 
    { 
     price = 0.55; 
    } 
    else if (temp >= 61 && temp <= 65) 
    { 
     price = 0.60; 
    } 
    else if (temp >= 66 && temp <= 70) 
    { 
     price = 0.65; 
    } 
    else if (temp >= 71 && temp <= 75) 
    { 
     price = 0.75; 
    } 
    else if (temp >= 76 && temp <= 80) 
    { 
     price = 0.80; 
    } 
    else if (temp >= 81 && temp <= 85) 
    { 
     price = 0.85; 
    } 
    else if (temp >= 86 && temp <= 90) 
    { 
     price = 0.90; 
    } 
    else if (temp > 90) 
    { 
     price = 1.00; 
    } 

    return price; 
} 
+0

了'的if-else '在做一件奇怪的事情,我相當懷疑你的實施,因爲這很可能是你錯誤的根源。但如果我們不知道溫度的價值,我們該如何回答呢?你嘗試調試它嗎? – SomeJavaGuy

+0

您可以添加一些具有不同「temp」值及其各自輸出的測試用例嗎? –

+2

你是否注意到,如果沒有所有這些「if」語句,你都可以實現同樣的目標?例如,使用'round'和/或'ceil'方法... –

回答

0

我懷疑你的問題在於你試圖將它用作實例方法時,你聲明方法爲「靜態」(並且很可能是變量「temp」和「price」)。

要麼使該方法非靜態,要麼改變它,以便您必須傳遞「temp」並直接返回值,而不是首先將其保存在靜態變量中。

public static double GetPrice (double temp) 
{ 
    if (temp >= 0 && temp < 50) 
    { 
     return 0.50; 
    } else if (temp >= 50 && temp <= 60) { 
     return 0.55; 
    } 
} 
0

當我嘗試它,它的工作原理是如何。如果讓代碼變小,你可以做些什麼,在if和else if之後放出{}。因爲:

if (temp >= 0 && temp < 50) 
{ 
    price = 0.50; 
} 
else if (temp >= 50 && temp <= 60) 
{ 
    price = 0.55; 
} 

是否相同:

if (temp >= 0 && temp < 50) price = 0.50; 
else if (temp >= 50 && temp <= 60) price = 0.55; 

所以,你可以把它們全部寫在對方。 這隻適用於if或else之後只有一條語句的情況。

+0

我只能在這裏發表評論,但我想說的是ParkerHalo的回答並不總是有效,因爲它確實將價格設置爲65,但它需要爲60.我沒有查找原因,但是它不起作用。 – CodeX

0

在我看來你的代碼工作正常。 如果你不想在你懷疑別人鏈使用,並希望有代碼比ParkerHalo的漂亮的代碼更復雜的:)你可以聲明範圍,並把它們列出

public static double GetPrice() 
{ 
    class PriceLevel 
    { 
     public double theHighestVal; 
     public boolean valIncluded;  // determines if < or <= comparator should be used 
     public double priceLevel; 
    } 
    List<PriceLevel> priceLevels = new ArrayList<PriceLevel>() 
    {{ 
     add(new PriceLevel() {{theHighestVal=0; valIncluded=false; priceLevel=0.0;}}); 
     add(new PriceLevel() {{theHighestVal=50; valIncluded=false; priceLevel=0.50;}}); 
     add(new PriceLevel() {{theHighestVal=60; valIncluded=true; priceLevel=0.55;}}); 
     add(new PriceLevel() {{theHighestVal=65; valIncluded=true; priceLevel=0.60;}}); 
     add(new PriceLevel() {{theHighestVal=70; valIncluded=true; priceLevel=0.65;}}); 
     add(new PriceLevel() {{theHighestVal=75; valIncluded=true; priceLevel=0.75;}}); 
     add(new PriceLevel() {{theHighestVal=80; valIncluded=true; priceLevel=0.80;}}); 
     add(new PriceLevel() {{theHighestVal=85; valIncluded=true; priceLevel=0.85;}}); 
     add(new PriceLevel() {{theHighestVal=90; valIncluded=true; priceLevel=0.90;}}); 
    }}; 

    double price = 1.0; 
    for (PriceLevel l : priceLevels) 
    { 
     if (l.valIncluded ? temp <= l.theHighestVal : temp < l.theHighestVal) 
     { 
      price = l.priceLevel; 
      break; 
     } 
    } 
    return price; 
}