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?
- Inicializar o índice fim com o valor correto na primeira inserção.
- Verificar se a fila está cheia antes de adicionar um novo elemento.
- Aumentar a capacidade do array dinamicamente quando necessário.
- 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