2015-11-03 57 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; 
}