FC ConcursosFC Concursos

Questão FC374689

No método enfileirar, qual é a finalidade da expressão (fim + 1) % elementos.length?

Algoritmos e Lógica de Programação

Instituto Consulplan · 2025

Um desenvolvedor está implementando uma estrutura de dados do tipo fila em Java. Ele iniciou a implementação da classe Fila utilizando um array para armazenar os elementos:

 

public class Fila {

    private int[ ] elementos;

    private int tamanho;

    private int inicio;

    private int fim;

 

    public Fila(int capacidade) {

        elementos = new int[capacidade];

        tamanho = 0;

        inicio = 0;

        fim = -1;

    } 

 

    public boolean estaVazia( ) {

       return tamanho == 0;

    }

 

    public boolean estaCheia( ) {

        return tamanho == elementos.length;

    }

 

    public void enfileirar(int elemento) {

        if (estaCheia( )) {

            System.out.println("Fila está cheia. Não é possível enfileirar.");

        } else {

            fim = (fim + 1) % elementos.length;

            elementos[fim] = elemento;

            tamanho++;

        }

  }

 

  public int desenfileirar( ) {

      if (estaVazia( )) {

         System.out.println("Fila está vazia. Não é possível desenfileirar.");

         return -1;

    } else {

        int elementoRemovido = elementos[inicio];

        inicio = (inicio + 1) % elementos.length;

        tamanho--;

        return elementoRemovido;

    }

  } 

}

 

No método enfileirar, qual é a finalidade da expressão (fim + 1) % elementos.length?

  1. Inicializar o índice fim com o valor correto na primeira inserção.
  2. Verificar se a fila está cheia antes de adicionar um novo elemento.
  3. Aumentar a capacidade do array dinamicamente quando necessário.
  4. Garantir que o índice fim não ultrapasse o tamanho do array, permitindo que a fila seja circular.
Mostrar resposta e comentário

Gabarito

D

Comentário do professor

A expressão \( (fim + 1) \% elementos.length \) tem por objetivo principal garantir o comportamento de fila circular. Ao usar o operador módulo, o cálculo sempre produz um índice no intervalo válido de 0 até elementos.length-1, evitando acessar posições fora do array e, assim, problemas como ArrayIndexOutOfBounds.

Na prática, quando fim está na última posição do array (por exemplo, elementos.length-1), o próximo valor calculado será 0, fazendo com que a fila reutilize as posições liberadas no início do array. Isso permite que a fila cresça e enfileire/desenfileire elementos continuamente sem mover dados.

Portanto, \( (fim + 1) \% elementos.length \) mantém o índice fim sempre dentro dos limites do array e implementa eficientemente o comportamento circular da fila.

Conteúdo do catálogo FC Concursos · Atualizado em

Continue aprendendo