Помогите с Java
public class CarsAssemble {
public double productionRatePerHour(int speed) {
double a = (speed * 221);
double b = a * 10 / 100;
if(speed >= 1 && speed <= 4) {
return a;
} else if(speed >= 5 && speed <= 8) {
return a - b;
} else if(speed >= 9) {
b = a * 20 / 100;
return a - b;
} else if(speed == 10) {
b = (a * 23 / 100);
return a - b;
}
return a - b;
}
}
В этом упражнении вам предстоит написать код для анализа работы сборочной линии на автомобильном заводе. Скорость конвейера может варьироваться от 0
(выключен) до 10
(максимальная).
При минимальной скорости (1) каждый час производится 221 автомобиль. Производительность линейно увеличивается с ростом скорости. Таким образом, при скорости 4 конвейер должен производить 4 * 221 = 884 автомобиля в час. Однако более высокая скорость увеличивает вероятность выпуска бракованных автомобилей, которые затем приходится отбраковывать. В следующей таблице показано, как скорость влияет на коэффициент успеха:
- От 1 до 4: 100 % успеха.
- От 5 до 8: 90 % успеха.
- 9: 80 % успеха.
- 10: 77 % успеха.
Intellij говорит что когда я указываю 10 выходит не верный ответ.
Ответы (1 шт):
Проблему в представленном коде с некорректным условием else if (speed >= 9)
описали в комментариях. К сожалению, компилятор не отлавливает подобные ошибки, так как не "может" вычислить, что ветвь else if (speed == 10)
становится недостижимой.
Однако, можно было бы сразу получить более простой и наглядный код при помощи switch-выражения, указав "проценты успеха" в зависимости от скорости конвейера как в исходном задании:
private static final int BASIC_RATE = 221; // базовая производительность
public static double productionRatePerHour(int speed) {
var outputPercent = switch(speed) {
case 1, 2, 3, 4 -> 1.00;
case 5, 6, 7, 8 -> 0.90;
case 9 -> 0.80;
case 10 -> 0.77;
default -> throw new IllegalArgumentException("Invalid speed = " + speed + ", must be in range [1..10]");
};
return BASIC_RATE * speed * outputPercent;
}
или определив массив с процентами отдельно (при некорректном значении speed
будет выброшено ArrayIndexOutOfBoundsException
):
private static final int BASIC_RATE = 221;
private static final double[] SUCCESS_PERCENT = {
1.0, 1.0, 1.0, 1.0,
0.9, 0.9, 0.9, 0.9,
0.8,
0.77
};
public static double productionRatePerHour(int speed) {
return BASIC_RATE * speed * SUCCESS_PERCENT[speed - 1];
}