Monika Dekster

Laboratorium 6: Wyjątki

Zadania

  1. Dane są nastepujące definicje klas wyjątków

    
    abstract class MathException extends ArithmeticException {
    	public abstract void printError();
    }
    
    class IntegerOverflowException extends MathException {
    	public IntegerOverflowException(String operator, int op1, int op2) { ... }
    }
    
    class DivideByZeroException extends MathException {
    	public DivideByZeroException(int op1) { ... }
    
    }
    

    Uzupełnij w/w klasy o definicje odpowiednich funkcji.

    Napisz funkcje add(int, int), subtract(int, int), multiply(int, int), oraz divide(int, int) odpowiednio dodające, odejmujące, mnożące i dzielące dwie liczby całkowite. Funkcje zwracają wynik, a w przypadku wystąpienia przepełnienia całkowitoliczbowego lub próby dzielenia przez 0 generują odpowiedni wyjątek z klasy MathExcep. Funkcja główna powinna wywołać wszystkie funkcje arytmetyczne dla kilku zestawów argumentów (prawidłowych i powodujących błędy). W przypadku wyłapania wyjątku program wypisuje komunikat o rodzaju błędu oraz wartości argumentów, jakie go spowodowały.

  2. Na podstawie programu zaprezentowanego na zajęciach demonstrującym tzw. "chained exceptions", napisz program LeaveWithChaining, który sprawdza, czy szef udzieli nam urlopu. Szef może nie udzielić urlopu gdy jest jeszcze dużo pracy do wykonania lub gdy ma zły humor. Proszę wykorzystać poniższy schemat.
    
    public class LeaveWithChaining {
    
    	public static void main(String[] args) {
    		try {
    			getLeave();
    		} catch(NoLeaveGrantedException e) {
    			e.printStackTrace();
    		}
    	}
    
    	static void getLeave() throws NoLeaveGrantedException {
    		try {
    			workToBeDone();
    			howIsTeamLead();
    			System.out.println("Leave granted");
    		} catch(Exception e) {
    			// ...
    		}
    	}
    
    	static void howIsTeamLead() throws TeamLeadUpsetException {
    		// throw TeamLeadUpsetException with probability 1/3
    	}
    
    	static void workToBeDone() throws WorkToBeDoneException {
    		// throw WorkToBeDoneException with probability 1/3
    	}
    
    	static class NoLeaveGrantedException extends Exception {
    		public NoLeaveGrantedException(String message, Throwable cause) {
    			// ctor with cause
    		}
    	}
    
    	static class TeamLeadUpsetException extends Exception {
    		public TeamLeadUpsetException(String message) {
    			// ...
    		}
    	}
    
    	static class WorkToBeDoneException extends Exception {
    		public WorkToBeDoneException(String message) {
    			// ...
    		}
    	}
    }