Tente Isto 9-1 Adicione exceções à classe Queue

Java para Iniciantes (Oracle) - Oct 26 - - Dev Community

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;
  }
}

Enter fullscreen mode Exit fullscreen mode

QueueEmptyException.java:

public class QueueEmptyException extends Exception {
  public String toString() {
    return "\nQueue is empty.";
  }
}

Enter fullscreen mode Exit fullscreen mode

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++];
  }
}

Enter fullscreen mode Exit fullscreen mode

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);
    }
  }
}

Enter fullscreen mode Exit fullscreen mode

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;
}

Enter fullscreen mode Exit fullscreen mode

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.

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .