Неверно выставляется цена за грузовые и легковые автомобили в зависимости от веса транспортного средства
private static int passengerCarPrice = 100; // RUB
private static int cargoCarPrice = 250; // RUB
private static int vehicleAdditionalPrice = 200; // RUB
public static void main(String[] args) {
System.out.println("Сколько автомобилей сгенерировать?");
Scanner scanner = new Scanner(System.in);
int carsCount = scanner.nextInt();
for (int i = 0; i < carsCount; i++) {
Car car = Camera.getNextCar();
System.out.println(car);
//Пропускаем автомобили спецтранспорта бесплатно
if (car.isSpecial) {
openWay();
continue;
}
//Проверяем высоту и массу автомобиля, вычисляем стоимость проезда
int price = calculatePrice(car);
if (price == -1) {
continue;
}
System.out.println("Общая сумма к оплате: " + price + " руб.");
}
}
/**
* Расчёт стоимости проезда исходя из массы и высоты
*/
private static int calculatePrice(Car car) {
int carHeight = car.height;
int price = 0;
if (carHeight > controllerMaxHeight) {
blockWay("высота вашего ТС превышает высоту пропускного пункта!");
return -1;
} else if (carHeight > passengerCarMaxHeight || passengerCarMaxWeight > passengerCarMaxWeight) {
double weight = car.weight;
//Грузовой автомобиль
if(weight > passengerCarMaxWeight)
{
price = cargoCarPrice;
if(car.hasVehicle()) {
price = price + vehicleAdditionalPrice;
}
}
//Легковой автомобиль
else {
price = cargoCarPrice;
}
}
else {
price = passengerCarPrice;
}
/**
* Открытие шлагбаума
*/
private static void openWay() {
System.out.println("Шлагбаум открывается... Счастливого пути!");
}
/**
* Сообщение о невозможности проезда
*/
private static void blockWay(String reason) {
System.out.println("Проезд невозможен: " + reason);
}
}
Ответы (2 шт):
Автор решения: DmitryK
→ Ссылка
Вот тут у вас условие хитрое if (... || passengerCarMaxWeight > passengerCarMaxWeight)? но на результат не влияет.
А вообще похоже вот тут ошибка, в первом else вы говорите о легковом автомобиле, а цену присваиваете грузового price = cargoCarPrice;. А должно быть вроде price = passengerCarPrice;:
if(weight > passengerCarMaxWeight)
{
price = cargoCarPrice;
if(car.hasVehicle())
{
price = price + vehicleAdditionalPrice;
}
}
// !!! Легковой автомобиль
else {
price = cargoCarPrice; // !!! а цена от грузового
}
}
else {
price = passengerCarPrice;
}
Автор решения: DmitryK
→ Ссылка
Я бы написал функцию расчета цены вот так:
private static int calculatePrice(Car car) {
int price = 0;
boolean isPassengerCar = true;
int carHeight = car.height;
if (carHeight > controllerMaxHeight) {
blockWay("высота вашего ТС превышает высоту пропускного пункта!");
return -1;
}
if (carHeight > passengerCarMaxHeight) {
isPassengerCar = false;
}
double weight = car.weight;
if(weight > passengerCarMaxWeight) {
isPassengerCar = false;
}
if(isPassengerCar == true) { //Легковой автомобиль
price = passengerCarPrice;
}
else { //Грузовой автомобиль
price = cargoCarPrice;
if(car.hasVehicle()) {
price += vehicleAdditionalPrice;
}
}
return price;
}