Arquivos do exercício:
QueueFullException.java
QueueEmptyException.java
FixedQueue.java
QExcDemo.java
Neste projeto, foram criadas duas exceções personalizadas para a classe de fila (Queue), que indicam condições de erro para fila cheia e fila vazia. Essas exceções são usadas pelos métodos put() e get().
Exceções de Fila:
- QueueFullException: exceção lançada quando se tenta inserir um elemento em uma fila cheia.
- A classe inclui um campo para armazenar o tamanho máximo da fila e sobrescreve o método toString() para exibir uma mensagem personalizada.
- QueueEmptyException: exceção lançada ao tentar remover um elemento de uma fila vazia.
- A classe também sobrescreve o toString() para mostrar uma mensagem quando a fila está vazia.
Implementação da Classe FixedQueue:
- A classe FixedQueue é modificada para lançar QueueFullException e QueueEmptyException quando ocorrem condições de erro.
- Para isso, put() e get() contêm uma cláusula throws em suas assinaturas.
- Ao lançar exceções, permite-se que o código chamador trate os erros de forma mais eficiente.
Código das Exceções e da Classe FixedQueue:
QueueFullException.java
public class QueueFullException extends Exception {
int size;
QueueFullException(int s) { size = s; }
public String toString() {
return "\nQueue is full. Maximum size is " + size;
}
}
QueueEmptyException.java:
public class QueueEmptyException extends Exception {
public String toString() {
return "\nQueue is empty.";
}
}
FixedQueue.java:
class FixedQueue implements ICharQ {
private char q[];
private int putloc, getloc;
public FixedQueue(int size) {
q = new char[size];
putloc = getloc = 0;
}
public void put(char ch) throws QueueFullException {
if (putloc == q.length)
throw new QueueFullException(q.length);
q[putloc++] = ch;
}
public char get() throws QueueEmptyException {
if (getloc == putloc)
throw new QueueEmptyException();
return q[getloc++];
}
}
Testando com QExcDemo:
A classe QExcDemo simula o uso da fila:
Insere elementos até exceder o limite, lançando QueueFullException.
Tenta remover elementos de uma fila vazia, lançando QueueEmptyException.
class QExcDemo {
public static void main(String args[]) {
FixedQueue q = new FixedQueue(10);
char ch;
int i;
try {
for(i=0; i < 11; i++) {
System.out.print("Attempting to store : " + (char) ('A' + i));
q.put((char) ('A' + i));
System.out.println(" - OK");
}
} catch (QueueFullException exc) {
System.out.println(exc);
}
try {
for(i=0; i < 11; i++) {
System.out.print("Getting next char: ");
ch = q.get();
System.out.println(ch);
}
} catch (QueueEmptyException exc) {
System.out.println(exc);
}
}
}
Interface Atualizada ICharQ:
ICharQ agora contém as exceções throws nos métodos put() e get(), refletindo as exceções lançadas pela FixedQueue.
public interface ICharQ {
void put(char ch) throws QueueFullException;
char get() throws QueueEmptyException;
}
Saída Esperada:
O programa exibe mensagens indicando o sucesso de inserções e remoções de elementos, além de mensagens de erro:
Queue is full. Maximum size is 10 quando a fila está cheia.
Queue is empty. ao tentar remover um elemento de uma fila vazia.