2015-11-03 2 views
-6

Этот код, похоже, не работает. Я не могу понять, почему это не так, но когда я запускаю его, кажется, что выбирает случайную цену из опций, а не уходит, какова температура на самом деле. Мне также интересно, будет ли лучший способ реализовать то, что я пытаюсь сделать, а не огромную лестницу if-else. Спасибо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

Прежде чем сомневаться, что 'если-то еще 'делает что-то странное, я скорее сомневаюсь в вашей реализации, потому что, скорее всего, это корень вашей ошибки. Но как мы должны ответить на него, если мы не знаем значение temp? вы пытались его отладить? – SomeJavaGuy

+0

Можете ли вы добавить несколько тестовых примеров с разными значениями «темп» и их соответствующих выходов? –

+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 if.

+0

Я могу с грустью комментировать только здесь, но я хочу сказать, что answere of ParkerHalo не работает всегда, для 63 он устанавливает цену до 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; 
} 
Смежные вопросы