Консультация № 188787
06.02.2016, 13:59
0.00 руб.
0 3 1
Здравствуйте! У меня возникли сложности с таким вопросом: 1)Исправить ошибку: неверно выставляется цена за грузовые и легковые автомобили 2)система не ловит (пропускает) угнанные полицейские автомобили



Приложение:
import core.*;
import core.Camera;

public class RoadController
{
public static Double passengerCarMaxWeight = 3500.0; // kg
public static Integer passengerCarMaxHeight = 2000; // mm
public static Integer controllerMaxHeight = 4000; // mm

public static Integer passengerCarPrice = 100; // RUB
public static Integer cargoCarPrice = 250; // RUB
public static Integer vehicleAdditionalPrice = 200; // RUB

public static Integer maxOncomingSpeed = 30; // km/h
public static Integer speedFineGrade = 20; // km/h
public static Integer finePerGrade = 500; // RUB
public static Integer criminalSpeed = 160; // km/h

public static void main(String[] args)
{
for(Integer i = 0; i < 10; i++)
{
Car car = Camera.getNextCar();
System.out.println(car);
System.out.println("Скорость: " + Camera.getCarSpeed(car) + " км/ч");

/**
* Пропускаем автомобили спецтранспорта
*/
if(car.isSpecial()) {
openWay();
continue;
}

/**
* Проверка на наличие номера в списке номеров нарушителей
*/
Boolean policeCalled = false;
for(String criminalNumber : Police.getCriminalNumbers())
{
String carNumber = car.getNumber();
if(carNumber.equals(criminalNumber))
{
Police.call("автомобиль нарушителя с номером " + carNumber);
blockWay("не двигайтесь с места! За вами уже выехали!");
break;
}
}
if(Police.wasCalled()) {
continue;
}

/**
* Проверяем высоту и массу автомобиля, вычисляем стоимость проезда
*/
Integer carHeight = car.getHeight();
Integer price = 0;
if(carHeight > controllerMaxHeight)
{
blockWay("высота вашего ТС превышает высоту пропускного пункта!");
continue;
}
else if(carHeight > passengerCarMaxHeight)
{
Double weight = WeightMeter.getWeight(car);
//Грузовой автомобиль
if(weight > passengerCarMaxWeight)
{
price = passengerCarPrice;
if(car.hasVehicle()) {
price = price + vehicleAdditionalPrice;
}
}
//Легковой автомобиль
else {
price = cargoCarPrice;
}
}
else {
price = passengerCarPrice;
}

/**
* Проверка скорости подъезда и выставление штрафа
*/
Integer carSpeed = Camera.getCarSpeed(car);
if(carSpeed > criminalSpeed)
{
Police.call("cкорость автомобиля - " + carSpeed + " км/ч, номер - " + car.getNumber());
blockWay("вы значительно превысили скорость. Ожидайте полицию!");
continue;
}
else if(carSpeed > maxOncomingSpeed)
{
Integer overSpeed = carSpeed - maxOncomingSpeed;
Integer totalFine = finePerGrade * (1 + overSpeed / speedFineGrade);
System.out.println("Вы превысили скорость! Штраф: " + totalFine + " руб.");
price = price + totalFine;
}

/**
* Отображение суммы к оплате
*/
System.out.println("Общая сумма к оплате: " + price + " руб.");
}

}

/**
* Открытие шлагбаума
*/
public static void openWay()
{
System.out.println("Шлагбаум открывается... Счастливого пути!");
}

public static void blockWay(String reason)
{
System.out.println("Проезд невозможен: " + reason);
}

Обсуждение

давно
Профессионал
848
1596
08.02.2016, 09:38
общий
1) Грузовым автомобилем считаем автомобиль высота которого больше passengerCarMaxHeight или масса больше passengerCarMaxWeight. Дополнительную плату за прицеп берем только с грузовых автомобилей. Если это не так, напишите как павильно.
[code lang=js]if(carHeight > controllerMaxHeight)
{
blockWay("высота вашего ТС превышает высоту пропускного пункта!");
continue;
}
else
{
Double weight = WeightMeter.getWeight(car);
if (carHeight > passengerCarMaxHeight || weight > passengerCarMaxWeight)
{
price = cargoCarPrice;
if(car.hasVehicle()) {
price = price + vehicleAdditionalPrice;
}
}
else {
//Легковой автомобиль
price = passengerCarPrice;
}

}[/code]
2) Система может пропускать угнанные автомобили например из-за разного регистра букв в номерах. Наверно следует сравнивать номера без учета регистра.
if(carNumber.equals(criminalNumber))
заменить на
if(carNumber.equalsIgnoreCase(criminalNumber))
давно
Профессионал
848
1596
11.02.2016, 10:19
общий
это ответ
Здравствуйте, fenixname!
1) Грузовым автомобилем считаем автомобиль высота которого больше passengerCarMaxHeight или масса больше passengerCarMaxWeight. Дополнительную плату за прицеп берем только с грузовых автомобилей.
[code lang=js] if(carHeight > controllerMaxHeight)
{
blockWay("высота вашего ТС превышает высоту пропускного пункта!");
continue;
}
else
{
Double weight = WeightMeter.getWeight(car);
if (carHeight > passengerCarMaxHeight || weight > passengerCarMaxWeight)
{
price = cargoCarPrice;
if(car.hasVehicle()) {
price = price + vehicleAdditionalPrice;
}
}
else {
//Легковой автомобиль
price = passengerCarPrice;
}

}[/code]
2) Система может пропускать угнанные автомобили например из-за разного регистра букв в номерах. Наверно следует сравнивать номера без учета регистра.
[code lang=js]if(carNumber.equals(criminalNumber))[/code]
заменить на
[code lang=js]if(carNumber.equalsIgnoreCase(criminalNumber))[/code]
4
давно
Посетитель
399502
1
14.02.2016, 09:13
общий
14.02.2016, 09:13
Здравствуйте, задание уже сделал.В любом случае благодарю!По расставленным ценам всё верно.А то что не ловит нарушителей, так там нужно блоки поменять местами

/**
* Проверка на наличие номера в списке номеров нарушителей
*/


а потом

/**
* Пропускаем автомобили спецтранспорта
*/
Форма ответа