Ir ao conteúdo

Posts recomendados

Postado

Estou desenvolvendo um código para a fila de um banco. As regras são as seguintes.

 

A senha deve ter a letra do tipo do atendimento, seguida de um número sequencial. Todos os tipos (preferencial, rápida e comum) obedecem uma única sequência numérica (P-1, C-2, C-3, R-4).

 

São quatro caixas, sendo que:

- Caixa 1: realiza os atendimentos P. Se não houver atendimentos preferenciais na fila, atende o próximo (R ou C).
- Caixas 2 e 3: atendem primeiro as senhas de atendimento R. Se não houver atendimento rápido, atendem o próximo da fila (P ou C).
- Caixa 4: realiza os atendimentos C. Se não houver atendimentos comuns na fila, atende o próximo (R ou P).

 

No entanto, estou com problemas na lógica, pois não está obedecendo esta ordem de atendimentos e dá erro. 

 

Alguém sabe me dizer como fazer ou o que está errado?

 


public class Senha {
    
    private String tipo;
    private int numero;

    public Senha(String tipo, int numero) {
        this.tipo = tipo;
        this.numero = numero;
    }

    public Senha() {
        this.tipo = "";
        this.numero = 0;
    }
    
    @Override
    public String toString() {
        return "Senhas{" + "tipo=" + tipo + ", numero=" + numero + '}';
    }

    public String getTipo() {
        return tipo;
    }

    public void setTipo(String tipo) {
        this.tipo = tipo;
    }

    public int getNumero() {
        return numero;
    }

    public void setNumero(int numero) {
        this.numero = numero;
    }

}


import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;


public class Formulario extends javax.swing.JFrame {

    int numero;
    List<Senha> listaSenha;
    
    
    public Formulario() {
        initComponents();
        numero = 0;
        listaSenha = new ArrayList<Senha>();
    }
    
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        jLabel1 = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();
        painelSenha = new javax.swing.JTextField();
        jLabel3 = new javax.swing.JLabel();
        painelGuiche = new javax.swing.JTextField();
        jLabel4 = new javax.swing.JLabel();
        botaoComum = new javax.swing.JButton();
        botaoRapida = new javax.swing.JButton();
        botaoPreferencial = new javax.swing.JButton();
        jLabel5 = new javax.swing.JLabel();
        campoSenha = new javax.swing.JTextField();
        jLabel6 = new javax.swing.JLabel();
        botaoCaixa1 = new javax.swing.JButton();
        botaoCaixa2 = new javax.swing.JButton();
        botaoCaixa3 = new javax.swing.JButton();
        botaoCaixa4 = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jLabel1.setText("BANCO JAVA");

        jLabel2.setText("SENHA:");

        jLabel3.setText("COMPARACER AO:");

        jLabel4.setText("PARA CLIENTES:");

        botaoComum.setText("COMUM");
        botaoComum.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botaoComumActionPerformed(evt);
            }
        });

        botaoRapida.setText("RÁPIDA");
        botaoRapida.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botaoRapidaActionPerformed(evt);
            }
        });

        botaoPreferencial.setText("PREFERENCIAL");
        botaoPreferencial.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botaoPreferencialActionPerformed(evt);
            }
        });

        jLabel5.setText("SUA SENHA É:");

        jLabel6.setText("PARA CAIXAS:");

        botaoCaixa1.setText("CAIXA 1");
        botaoCaixa1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botaoCaixa1ActionPerformed(evt);
            }
        });

        botaoCaixa2.setText("CAIXA 2");
        botaoCaixa2.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botaoCaixa2ActionPerformed(evt);
            }
        });

        botaoCaixa3.setText("CAIXA 3");
        botaoCaixa3.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botaoCaixa3ActionPerformed(evt);
            }
        });

        botaoCaixa4.setText("CAIXA 4");
        botaoCaixa4.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botaoCaixa4ActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(19, 19, 19)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                            .addComponent(painelSenha, javax.swing.GroupLayout.DEFAULT_SIZE, 437, Short.MAX_VALUE)
                            .addComponent(jLabel3)
                            .addComponent(jLabel2)
                            .addComponent(jLabel1)
                            .addComponent(painelGuiche))
                        .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                    .addGroup(layout.createSequentialGroup()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jLabel4)
                            .addGroup(layout.createSequentialGroup()
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                                    .addComponent(botaoComum, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                    .addComponent(botaoRapida, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                    .addComponent(botaoPreferencial, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                                .addGap(18, 18, 18)
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                                    .addComponent(jLabel5, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                    .addComponent(campoSenha))))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 111, Short.MAX_VALUE)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(botaoCaixa1, javax.swing.GroupLayout.PREFERRED_SIZE, 110, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(jLabel6)
                            .addComponent(botaoCaixa2, javax.swing.GroupLayout.PREFERRED_SIZE, 110, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(botaoCaixa3, javax.swing.GroupLayout.PREFERRED_SIZE, 110, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(botaoCaixa4, javax.swing.GroupLayout.PREFERRED_SIZE, 110, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addGap(42, 42, 42))))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jLabel1)
                .addGap(18, 18, 18)
                .addComponent(jLabel2)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(painelSenha, javax.swing.GroupLayout.PREFERRED_SIZE, 83, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(18, 18, 18)
                .addComponent(jLabel3)
                .addGap(4, 4, 4)
                .addComponent(painelGuiche, javax.swing.GroupLayout.PREFERRED_SIZE, 83, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(33, 33, 33)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel4)
                    .addComponent(jLabel6))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(botaoComum)
                            .addComponent(botaoCaixa1))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(botaoRapida)
                            .addComponent(botaoCaixa2))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(botaoPreferencial)
                            .addComponent(botaoCaixa3)))
                    .addGroup(layout.createSequentialGroup()
                        .addGap(11, 11, 11)
                        .addComponent(jLabel5)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(campoSenha)))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(botaoCaixa4)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>                        

    private void botaoRapidaActionPerformed(java.awt.event.ActionEvent evt) {                                            
        numero++;
        Senha s = new Senha("R", numero);
        listaSenha.add(s);
        campoSenha.setText(String.valueOf(s.getTipo()) + "-" + String.valueOf(s.getNumero()));
    }                                           

    private void botaoComumActionPerformed(java.awt.event.ActionEvent evt) {                                           
       numero++;
        Senha s = new Senha("C", numero);
        listaSenha.add(s);
        campoSenha.setText(String.valueOf(s.getTipo()) + "-" + String.valueOf(s.getNumero())); 
    }                                          

    private void botaoPreferencialActionPerformed(java.awt.event.ActionEvent evt) {                                                  
numero++;
        Senha s = new Senha("P", numero);
        listaSenha.add(s);
        campoSenha.setText(String.valueOf(s.getTipo()) + "-" + String.valueOf(s.getNumero()));        // TODO add your handling code here:
    }                                                 

    private void botaoCaixa1ActionPerformed(java.awt.event.ActionEvent evt) {                                            
        Iterator<Senha> itr = listaSenha.iterator();

        while (itr.hasNext()) {
            Senha caixa = itr.next();
            itr.remove();
            if (caixa.getTipo().equals("P")) {

                painelSenha.setText(String.valueOf(caixa.getTipo()) + "-" + String.valueOf(caixa.getNumero()));
                painelGuiche.setText(" Caixa 1 ");
                break;

            } else {
                painelSenha.setText(String.valueOf(caixa.getTipo()) + "-" + String.valueOf(caixa.getNumero()));
                painelGuiche.setText(" Caixa 1 ");
            }

        }                          
    }                                           

    private void botaoCaixa2ActionPerformed(java.awt.event.ActionEvent evt) {                                            
        Iterator<Senha> itr = listaSenha.iterator();

        while (itr.hasNext()) {
            Senha caixa = itr.next();
            itr.remove();
            if (caixa.getTipo().equals("R")) {

                painelSenha.setText(String.valueOf(caixa.getTipo()) + "-" + String.valueOf(caixa.getNumero()));
                painelGuiche.setText(" Caixa 2 ");
                break;

            } else {
                painelSenha.setText(String.valueOf(caixa.getTipo()) + "-" + String.valueOf(caixa.getNumero()));
                painelGuiche.setText(" Caixa 2 ");
            }
    }                   
    }                                           

    private void botaoCaixa3ActionPerformed(java.awt.event.ActionEvent evt) {                                            
        Iterator<Senha> itr = listaSenha.iterator();
        
        while(itr.hasNext()){
            Senha caixa = itr.next();
            itr.remove();
            if(caixa.getTipo().equals("R")){
                
            painelSenha.setText(String.valueOf(caixa.getTipo()) + "-" + String.valueOf(caixa.getNumero()));
            painelGuiche.setText(" Caixa 3 ");
            break;
                   
            }
            else{
            painelSenha.setText(String.valueOf(caixa.getTipo()) + "-" + String.valueOf(caixa.getNumero()));
            painelGuiche.setText(" Caixa 3 ");
            }
    }              
    }                                           

    private void botaoCaixa4ActionPerformed(java.awt.event.ActionEvent evt) {                                            
        Iterator<Senha> itr = listaSenha.iterator();
        
        while(itr.hasNext()){
            Senha caixa = itr.next();
            itr.remove();
            if(caixa.getTipo().equals("C")){
                
            painelSenha.setText(String.valueOf(caixa.getTipo()) + "-" + String.valueOf(caixa.getNumero()));
            painelGuiche.setText(" Caixa 4 ");
            break;
                   
            }
            else{
            painelSenha.setText(String.valueOf(caixa.getTipo()) + "-" + String.valueOf(caixa.getNumero()));
            painelGuiche.setText(" Caixa 4 ");
            }
    }                     
    }                                           

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
       
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(Formulario.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(Formulario.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(Formulario.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(Formulario.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>

        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Formulario().setVisible(true);
            }
        });
    }



    // Variables declaration - do not modify                     
    private javax.swing.JButton botaoCaixa1;
    private javax.swing.JButton botaoCaixa2;
    private javax.swing.JButton botaoCaixa3;
    private javax.swing.JButton botaoCaixa4;
    private javax.swing.JButton botaoComum;
    private javax.swing.JButton botaoPreferencial;
    private javax.swing.JButton botaoRapida;
    private javax.swing.JTextField campoSenha;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JLabel jLabel6;
    private javax.swing.JTextField painelGuiche;
    private javax.swing.JTextField painelSenha;
    // End of variables declaration                   
}

 

Postado

Vou tentar fazer em pseudo código aqui,

 

primeiro if(caixa == 1) 

você percorre até o final da fila achando o primeiro P você atende, caso não existe(else) P, você atende o próximo da fila.

 

segundo if(caixa == 2) ou (caixa == 3)

você percorre até o final da fila achando o primeiro R você atende, caso não existe(else) R, você atende o próximo da fila.

 

terceiro if(caixa == 4) 

você percorre até o final da fila achando o primeiro C você atende, caso não existe(else) C, você atende o próximo da fila.

 

não fiz em Java, mas espero ter tentado ajudar na lógica.

 

Postado

@Verônica Xavier Gabardo Olha eu não to compilando aqui mas você poderia descrever o erro? e o comportamento que está dando errado?

 

adicionado 6 minutos depois

Pelo jeito enquanto percorre você está fazendo o if, ta errado você tem que guardar a referencia do próximo seja quem for, se for P no caixa 1 você defini o atendimento e remove em seguida, se não for P, você NÃO remove da fila continua andando até achar o próximo P e atender, se não existir mais P volte na referencia do próximo inicial e atendi ele(remove em seguida)  e de continuidade na fila.

Postado

@Matheus0019 Os caixas atendem primeiro as letras que devem atender, porém, na sequência, deveriam seguir a ordem da fila do começo, mas não, seguem a ordem a partir do último atendido.

 

Por exemplo, o caixa 2 tem que atender as senhas R, se não tiver senha R, tem que atender as C ou P (de acordo com a ordem numérica).

Supondo que temos a seguinte fila: C1, C2, R3, R4, P5, P6. Ele atende a R3 e R4 (até aí está correto), mas depois, chama a P5, enquanto deveria obedecer a ordem numérica e chamar a C1.

Postado
5 minutos atrás, Verônica Xavier Gabardo disse:

@Matheus0019 Os caixas atendem primeiro as letras que devem atender, porém, na sequência, deveriam seguir a ordem da fila do começo, mas não, seguem a ordem a partir do último atendido.

 

Por exemplo, o caixa 2 tem que atender as senhas R, se não tiver senha R, tem que atender as C ou P (de acordo com a ordem numérica).

Supondo que temos a seguinte fila: C1, C2, R3, R4, P5, P6. Ele atende a R3 e R4 (até aí está correto), mas depois, chama a P5, enquanto deveria obedecer a ordem numérica e chamar a C1.

Isso que falei se o próximo não for o preferencial naquele caixa, você GUARDA a referencia dele, atendi os preferenciais remove da fila e depois volta na referencia guardada, você não está guardando a referencia. Sempre tu ta indo para o próximo e não está voltando no ponto que deveria voltar

Postado
13 minutos atrás, Verônica Xavier Gabardo disse:

@Matheus0019 @Matheus0019 como assim guardar a referência? sou bem iniciante... hehehe

Então você entra na fila vê se o primeiro é preferencial, se sim voce atende e remove, se não for preferencial você faz uma variável que aponte para ele tipo first_fila = primeiro, em seguida ande na fila até o final, se não existir preferencial você volta no first_fila e continua percorrendo a fila a partir dele percorrendo normalmente. Por exemplo você anda na fila até o final atendendo os preferenciais e removendo da fila depois que não houver preferencial você volta na primeira posição que é aquele que não é preferencial que você guardou lá no começo e prossiga normalmente. Entende?

Postado

@Verônica Xavier Gabardo O que você ta fazendo atualmente é andando e removendo, neste caso você tem perdido algumas senhas que ainda não foram atendidas, você só remove após atender. Você deve andar na fila duas vezes uma vez pegando só preferencial e atendendo(removendo), e outra voltando do ponto inicial e prosseguindo normalmente.

adicionado 45 minutos depois

Outra solução seria sempre ordenar as filas primeiro por preferência(colocando o preferencial do caixa na frente), depois os que sobrarem ordenar por ordem numérica da senha, resolveria seu problema.

  • Curtir 1
Postado

Não programo em Java, mas vou dar meu palpite de leigo:

//Crie 3 filas, uma para cada tipo de senha 
List<Senha> listaSenhaP;
List<Senha> listaSenhaR;
List<Senha> listaSenhaC;
//Cada botao adicionar um elemento em filas diferens
private void botaoRapidaActionPerformed(java.awt.event.ActionEvent evt) {                                            
       //...
        listaSenhaR.add(s);
        
private void botaoComumActionPerformed(java.awt.event.ActionEvent evt) {                                           
  //...
        listaSenhaC.add(s);
        
private void botaoPreferencialActionPerformed(java.awt.event.ActionEvent evt) {                                                  
//...
        listaSenhaP.add(s);
  
// Na hora de iteragir com as filhas, se uma determinada fila esta vazia você passa para a proxima
 
  private void botaoCaixa1ActionPerformed(java.awt.event.ActionEvent evt) {                                            
        Iterator<Senha> itr = listaSenhaP.iterator();
  		// verifica se a fila Preferencial está vazia
  		if (listaSenhP.isEmpty()) 
  		{
  			//verifica se a lista Rápida também está vazia
  			if (listaSenhaR.isEmpty()) 
  			{
  				//Caso a fila rápida esteja vazia, coloque aqui o código para chamar da fila Comum
  			} else
  			{
  				//Bote aqui o código para chamar a da fila Rápida
  			}
  
  		} else //Cahama da fila Rápida, pois não está vazia
  		{
   			Senha caixa = itr.next();
            itr.remove();
  			painelSenha.setText(String.valueOf(caixa.getTipo()) + "-" + String.valueOf(caixa.getNumero()));
           	painelGuiche.setText(" Caixa 1 ");
           
  		}

        
    }         
            
  

Espero ter ajudado.

  • Curtir 1
Postado

@Mateus Corcini  sim, fiz por primeiro.

adicionado 4 minutos depois

@j6t2h

private void botaoCaixa1ActionPerformed(java.awt.event.ActionEvent evt) { int aux = 0; if(listaSenha.size() > 0){ painelGuiche.setText(" Caixa 1 "); for (int i = 0; i < listaSenha.size(); i++) { if(listaSenha.get(i).getTipo().equals("P")){ painelSenha.setText(String.valueOf(listaSenha.get(i).getTipo()) + "-" + String.valueOf(listaSenha.get(i).getNumero())); listaSenha.remove(i); aux = 1; break; } } if(aux == 0){ for (int i = 0; i < listaSenha.size(); i++) { if(listaSenha.get(i).getTipo().equals("R") || listaSenha.get(i).getTipo().equals("C")){ painelSenha.setText(String.valueOf(listaSenha.get(i).getTipo()) + "-" + String.valueOf(listaSenha.get(i).getNumero())); listaSenha.remove(i); aux = 1; break; } } } } }

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...