public void payForMeal(double amount) throws Exception {
if (balance - amount < 0 && amount - balance <= creditLimit) {
this.strStatus = "Using Credit";
double newBalance = balance - amount;
balance = newBalance;
throw new ArithmeticException("\n\n-----------------------------\n" + "You must top-up your balance\n" + "Your new balance is: " + balance + "\n" + "You are: " + strStatus + "\n" + "-----------------------------\n");
}//if
else if (amount > creditLimit && balance < amount) {
throw new ArithmeticException("\n\n----------------------\n" + "Cost of meal exceeds the credit limit." + "\n----------------------\n");
}//elseif
else {
double newBalance = balance - amount;
balance = newBalance;
transCount++;
}//else
}//payForMeal
Gdy saldo wynosi 2, a payForMeal jest ustawione na 8, przed awarią programu drukowane są następujące informacje:
Wyświetlanie szczegółów konta:
Koszt posiłku przekracza limit kredytowy.
Customer ID: 200
Name: Joe
Balance: 2.0
Minimum TopUp: 2.0
Account Status: Valid
Credit Limit: 5.0
Transaction Count: 0
Jak mogę dodać próbny zaczep, aby zatrzymać awarię programowania, ale nadal drukować błędy, dzięki
2 odpowiedzi
Powinieneś owinąć metodę, która wyrzuca błąd try catch, w ten sposób
// ... some code
try {
payForMeal(amount);
} catch (ArithmeticException e) {
System.out.log("An error occurred trying to pay for the meal: " + e.getMessage());
}
// ... more code
Sam zdecydujesz, jak sobie poradzisz z błędem.
Staraj się robić mniej w swoich metodach. Programowanie dotyczy dekompozycji i projektowania problemów.
Użyj metody checkBalanceSufficient
, która zwraca wynik , zamiast robić to w kodzie. Sprawdź, jakie dane musi zwrócić. Nie umieszczaj żadnych instrukcji print, dotyczy to Twojej metody głównej lub klas związanych z interfejsem użytkownika & amp; metody.
Nie używaj ponownie ArithmeticException
. Obliczenia są w porządku, jest to wynik , z którego nie jesteś zadowolony. Więc zamiast tego musisz zdefiniować własny wyjątek wyższego poziomu (programowanie wyjątku jest naprawdę łatwe, po prostu rozszerz Exception
). Najlepiej jednak, jeśli Twój kod nigdy nie zgłosi wyjątku z powodu problemów z danymi wejściowymi; możesz obsłużyć błędne dane wejściowe w oddzielnych metodach na początku kodu.
Jeśli w klauzuli catch
znajduje się kod wyższego poziomu (tj. Kod implementujący przypadek użycia ), to już robisz coś źle.
Podobne pytania
Nowe pytania
java
Java to język programowania wysokiego poziomu. Użyj tego tagu, jeśli masz problemy z używaniem lub zrozumieniem samego języka. Ten tag jest rzadko używany samodzielnie i jest najczęściej używany w połączeniu z [spring], [spring-boot], [jakarta-ee], [android], [javafx], [hadoop], [gradle] i [maven].