Ajuda com Fila

Estou confuso com um código-fonte que eu peguei com um aluno da minha sala da faculdade.
Segue abaixo:

import java.io.*;
import javax.swing.*;

public class Fila
{

private int[] F;
private int Back,Front,Tamanho,R;

public void InserirFila(int Valor)
	{
	R=(Front%(Tamanho-1))+1;
	if (R!=Back)
		{
		F[R]=Valor;
		Front=R;
		if (Back==0) Back=1;
		System.out.println("Valor Inserido!");
		}	
	else
		{
		System.out.println("Pilha cheia!");
		}
	}

public void RemoveFila()
	{
	if (Front==0) 
		{
		System.out.println("Pilha ja esta vazia");
		}
	else 
		{
		if (Front==Back)
			{
			Front=0;
			Back=0;
			}
		else
			{
			Back=(Back%(Tamanho-1))+1;
			System.out.println("Valor Removido!");
			}
		}
	}

public void GetBottom()
	{
	System.out.println("Valor da posicao "+Back+" eh "+F[Back]);
	}
	
public Fila(int x)
	{	
	F=new int[x];
	Tamanho=x;
	Back=0;
	Front=0;
	}

public static void main(String args[])
	{
	try
		{
		Fila a = new Fila(Integer.parseInt(args[0]));
		a.InserirFila(Integer.parseInt(args[1]));
		a.GetBottom();
		a.RemoveFila();
		}	
	catch(ArrayIndexOutOfBoundsException z)
		{
		System.out.println("ERRO!");
		System.exit(0);
		}
	catch(NumberFormatException z)
		{
		System.out.println("ERRO!");
		System.exit(0);
		}
	}

}

As partes que me deixam confuso são:
1- Por que usa-se o “%(tamanho-1)+1” tanto para o inseror como para o remover??
2- Por que no GetBottom() imprime-se “back” e depois “F[back]”?

Por enquanto é isso que tá me deixando meio doido aqui…

Desde já, agradeço pela ajuda!

Você está trabalhando com uma lista circular.

O código
R=(Front%(Tamanho-1))+1;

Faz um contador circular em R. % é o operador de resto, então, observe o comportamento da expressão caso tamanho seja 5.

R=(0 % 4) + 1 = 0+1 = 1
R=(1 % 4) + 1 = 2+1 = 2
R=(2 % 4) + 1 = 3+1 = 3
R=(3 % 4) + 1 = 4+1 = 4
R=(4 % 4) + 1 = 0+1 = 1

Note que, na hora de adicionar, quem é somado de um de maneira circular é a variável R, e na hora de remover é a variável front. Ou seja, num caso ele está adicionando ao “rabo” da fila, no outro caso na “frente”.

No getBottom() ele está imprimindo tanto o índice do último elemento (back), quanto o elemento em si (F[back]).

Entretanto, você tem bons motivos para não entender esse código. Ele está mal estruturado e muito pouco claro. As variáveis tem nomes pouco significativos e os métodos nem sequer estão comentados. Veja essa implementação de pilha, do Mantu, para um exemplo de código bem estruturado e procure fazer o seu igual.