Fila circular sequêncial

0 respostas
socratestr

Olá a todos! Gostaria de uma dica a respeito da implementação da fila circular sequencial, mais precisamente para imprimir a fila!!! eu tenho que imprimi-la e sempre atualiza-la no JTextArea quando entro ou saio com um elemento da lista, mas tá dando um probleminha na primeira tentativa eu consigo inserir todos os elemento e retirar, mas quando eu tento reaproveitar os espaços vazios do vetor que é essa a intenção, ele não imprime mais no JTextArea e depois disso também não imprime normalmente também mesmo que eu só coloque e tire todos os elementos da fila sem reaproveitar as posições vazias do vetor!!! ele esta reaproveitando as posições, mas não está imprimindo! Por exemplo: meu vetor tem 5 posições e eu insiro os valores 1, 2, 3, 4 e 5, até ai tudo bem ele imprime, depois eu começo a retirar os elementos por exemplo o 1 e o 2, até ai tudo bem ele também imprime! então tem duas posições sobrando no meu vetor e se eu tentar inserir mais dois elemento por exemplo 10 e 20, quando eu entro com o primeiro ele já não imprime mais, mas as posições são reaproveitadas por que cada elemento que eu retiro é mostrado em um jtextfield, acredito que o problema é a impressão mesmo se alguém puder me ajudar agradeço!!! segue o código da minha classe e também o código dos botões:

public class FilaCircular {

    private final int tamanho = 5;
    private String[] filaCircular = new String[tamanho];
    private int inicio;
    private int fim;
    private int numeroDeElementos;

    public FilaCircular() {
        inicio = -1;
        fim = -1;
        numeroDeElementos = 0;
    }

    public boolean filaCheia() {
        if (numeroDeElementos == tamanho) {
            return true;
        } else {
            return false;
        }
    }

    public boolean filaVazia() {
        if (numeroDeElementos == 0) {
            return true;
        } else {
            return false;
        }
    }

    public boolean entrarElemento(String elemento) {
        if (!filaCheia()) {
            if (fim == tamanho - 1) {
                fim = 0;
            } else {
                fim = fim + 1;
            }
            numeroDeElementos= numeroDeElementos + 1;
            filaCircular[fim] = elemento;
            return true;
        } else {
            return false;
        }
    }

    public String sairElemento() {
        String elemento = null;
        if (!filaVazia()) {
            if (inicio == tamanho - 1) {
                inicio = 0;
            } else {
                inicio = inicio + 1;
            }
            elemento = filaCircular[inicio];
            numeroDeElementos= numeroDeElementos - 1;
            return elemento;
        } else {
            return elemento;
        }
    }

    public String imprimir() {
        String elemento = "";
        for (int cont = inicio +1; cont <= fim; cont++) {
            elemento += filaCircular[cont] + " ";
        }
        return elemento;
    }
}

Código dos botões de entrar e sair elemento:

private void jButtonEntrarActionPerformed(java.awt.event.ActionEvent evt) {                                              
        boolean retorno;
        retorno = fila.entrarElemento(jTextField1.getText());
        if (retorno) {
            String elemento;
            elemento = fila.imprimir();
            jTextField1.setText(null);
            jTextArea1.setText(null);
            jTextField1.grabFocus();
            jTextArea1.append(elemento);
        } else {
            JOptionPane.showMessageDialog(null, "A filha está cheia!!!");
            jTextField1.setText(null);
        }
    }                                             

    private void jButtonSairActionPerformed(java.awt.event.ActionEvent evt) {                                            
        String elemento;
        String imprime;
        elemento = fila.sairElemento();
        if (elemento == null) {
            JOptionPane.showMessageDialog(null, "A fila está vazia!!!");
            jTextField2.setText(null);
        } else {
            jTextArea1.setText(null);
            imprime = fila.imprimir();
            jTextArea1.append(imprime);
            jTextField2.setText(elemento);
        }
    }                                           

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        dispose();
    }

Desde já agradeço pela atenção!!!

Criado 19 de abril de 2015
Respostas 0
Participantes 1