@thatmaniscool

Как пропустить часть кода после выброса исключения в Java?

Приведу следующий пример с массива.
Прежде всего я создаю интерфейс с следующими параметрами..
public interface ShowAllExcemption <T, E extends Exception, F extends Exception> {
		public void AddMemeber (T arg) throws E;
		public void ShowMember () throws F;
}

После чего создаю абстрактный класс-родитель, которые будет выдавать сообщения при исключениях
public abstract class Message extends Exception {
	public abstract String toString ();
}

И два класса наследника, которые будут выдавать сообщения при переполнении массива и ... выход за ноль массива.
public class ArrIsFull extends Message {
	public String toString() {
		return "Array is full!";
	}
}

public class ArrIsEmpty extends Message{
	public String toString() {
		return "Array is empty!";
	}
}

Обрабатываемый класс, который будет содержать тот самый массив.
public class ArrClass implements ShowAllExcemption <Integer, ArrIsFull, ArrIsEmpty>{
	private int [] arr = new int [10];
	private int count = 0;

	public void AddMemeber(Integer arg) throws ArrIsFull {
			if (count > arr.length)
				throw new ArrIsFull();
			else
				arr[count++] = arg;
	}


	public void ShowMember() throws ArrIsEmpty {
			if (count == 0)
				throw new ArrIsEmpty();
			else
				System.out.println(arr[count--]);
		
	}
}

И собственно точку входа в программу, но проблема в том, что он выдает только одно исключение, а до второго не доходит. Как сделать так, что при первом исключении программа пропускала часть кода и после чего переходило ко следующей части программы?
import java.util.*;

public class MainClass {

	public static void main(String[] args) {
		ArrClass arr = new ArrClass ();
		Random rand = new Random ();

		
		try{
			for (int i=0; i!=7; i++)
			 arr.AddMemeber(rand.nextInt(10));
		} catch (Message e){
			 System.out.println(e);
		}

		
		try{
			for (int i=0; i!=8; i++)
			arr.ShowMember();
		} catch (Message e){
			System.out.println(e);
		}
	}

}
  • Вопрос задан
  • 413 просмотров
Пригласить эксперта
Ответы на вопрос 1
@nirvimel
При размере массива 10 первый цикл for (int i=0; i!=7; i++) проходит без выброса исключений, так как переполнение не достигнуто. А второй for (int i=0; i!=8; i++) выбирает на один элемент больше, в результате происходит underflow (в русском языке, кажется, нет точного аналога этому слову) и вылетает исключение.

Также вместо if (count > arr.length) должно стоять нестрогое условие if (count >= arr.length). Иначе при count == arr.length в строке arr[count++] будет выход за границы массива.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы