如果 - 否则选择随机选项而不是基于随机生成的数字选择

时间:2015-11-03 13:52:37

标签: java if-statement

此代码似乎不起作用。我似乎无法弄清楚它为什么不是,但是当我运行它时,它似乎从选项中选择一个随机价格而不是实际上是温度。我也想知道是否有更好的方法来实现我正在尝试做的事情,而不是一个巨大的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;
}

3 个答案:

答案 0 :(得分:0)

当我尝试它时,它的工作方式如何。你可以做些什么来保持代码更小是在if和else之后放出{}。因为:

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 if之后只有一个语句。

答案 1 :(得分:0)

我怀疑你的问题是你把方法声明为&#34;静态&#34; (并且很可能是变量&#34; temp&#34;以及&#34;价格&#34;以及),同时尝试将其用作实例方法。

要么使方法非静态,要么改变它,以便你必须通过&#34; temp&#34;并直接返回值,而不是先将其保存在静态变量中。

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

答案 2 :(得分:0)

在我看来,您的代码正常运行。 如果您不想使用if else链并希望代码比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;
}