Давайте сделаем это просто: все, что вам нужно сделать, это передать двойной параметр конструктора Exception в параметр супер-конструктора, вот и все.
Исключение не должно действительно содержать состояние, а скорее используется в основном для сообщения об ошибке, где это необходимо.Таким образом, fulelNeeded должен быть передан в конструктор супер, чтобы трассировка стека отображала это значение.Например:
super("You need fuel: " + fuelNeeded);
все проще, чем как вы его проводите:
public class OutOfFuelException extends Exception {
public OutOfFuelException (double fuelNeeded) {
super("Fuel shortfall: " + fuelNeeded);
}
}
Так что это должно работать:
if (miles > getRange()) {
fuel = 0;
throw new OutOfFuelException(getShortfall());
}
или, возможно,проще:
if (miles > getRange()) {
fuel = 0;
throw new OutOfFuelException(miles - getRange());
}