Arraylist para consultar

2 respostas
T

bom galera , sou novo em java,mais vamos la...
tenho q fazer uma classe que contenha metodos cadastrar e consultar apenas,
estão feitos já,porem quando cadastro mais de um,quando vou consultar ,ele sempre me mostra o ultimo registro que foi cadastrado.

package sistemaacademico;

import java.util.ArrayList;
import javax.swing.JOptionPane;

/**
 *
 * @author Jogos
 */
public class SistemaAcademico {
    public ArrayList aluno;    
    public SistemaAcademico(){        
        aluno = new ArrayList();
    }    
    /**
     * @param args the command line arguments
     */ 
    public static void main(String[] args) {
        // TODO code application logic here
        int opcao;
        SistemaAcademico sa = new SistemaAcademico();
        Aluno al =  new Aluno();
    
            while(true)
            {
            opcao = Integer.parseInt(JOptionPane.showInputDialog("Sistema academico"
                    + "\n1 - Cadastrar aluno"
                    + "\n2 - Consultar Aluno"
                    + "\n0 - Sair"));
            
                switch(opcao){
                case 1:        
                    al.rgm = JOptionPane.showInputDialog("Digite o RGM do aluno:\n");
                    al.nome = JOptionPane.showInputDialog("Digite o nome do aluno:\n");
                 // al.endereco = JOptionPane.showInputDialog("Digite o endereço do aluno:\n");
                    al.curso = JOptionPane.showInputDialog("Digite o curso do aluno:\n");
                    sa.cadastrar(al);
                    JOptionPane.showMessageDialog(null, "Cadastrado com sucesso!");
                    break;                    
                case 2:
                    al.rgm = JOptionPane.showInputDialog("Digite o RGM a ser consultado:\n");
                    al = sa.consultar(al);
                    JOptionPane.showMessageDialog(null, "Nome: " + al.nome + "\nCurso: " + al.curso + "\nEndereço: " + al.endereco);
                     break;
                case 0:                        
                    return;
                    default:
                    JOptionPane.showMessageDialog(null, "Valor Invalido!");   
                    continue;
                    }
            }       
    }
      void cadastrar(Aluno al){
        aluno.add(al);
    }     
    private Aluno consultar(Aluno al){
        Aluno aux;
        for(int i = 0; i < aluno.size(); i++){
            aux = (Aluno)aluno.get(i);
            if(al.rgm.equals(aux.rgm))
            {
                return aux;
            }else{
                break;
            }
            }
                JOptionPane.showMessageDialog(null, "Nenhum Aluno encontrado!");  
                return null; 
    }
     

}
package sistemaacademico;

/**
 *
 * @author Jogos
 */
class Aluno {
    String rgm,
           nome,
           endereco,
           curso; 

//metodos get/sets

Por Favor ajudem um novato em java. Obrigado!

2 Respostas

gaulix

Comentei no código os erros:

import java.util.ArrayList;
import javax.swing.JOptionPane;

/**
 *
 * @author Jogos
 */
public class SistemaAcademico {

    public ArrayList aluno;

    public SistemaAcademico() {
        aluno = new ArrayList();
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        int opcao;
        SistemaAcademico sa = new SistemaAcademico();
        Aluno al;//voce criava um objeto aluno, e usava ele sempre dentro do seu programa, nao vai funcionar assim, precisas criar uma nova instancia para cada aluno cadastrado

        while (true) {
            opcao = Integer.parseInt(JOptionPane.showInputDialog("Sistema academico"
                    + "\n1 - Cadastrar aluno"
                    + "\n2 - Consultar Aluno"
                    + "\n0 - Sair"));

            switch (opcao) {
                case 1:
                    al  = new Aluno();//crio uma nova instancia para cadastrar um aluno
                    al.rgm = JOptionPane.showInputDialog("Digite o RGM do aluno:\n");
                    al.nome = JOptionPane.showInputDialog("Digite o nome do aluno:\n");
                    // al.endereco = JOptionPane.showInputDialog("Digite o endereço do aluno:\n");
                    al.curso = JOptionPane.showInputDialog("Digite o curso do aluno:\n");
                    sa.cadastrar(al);
                    JOptionPane.showMessageDialog(null, "Cadastrado com sucesso!");
                    break;
                case 2:
                    String rgm = JOptionPane.showInputDialog("Digite o RGM a ser consultado:\n");//nao é necessário criar um aluno só com o atributo rgm, podes simplesmente colocar em uma String e fazer a comparacao no método consultar
                    al = sa.consultar(rgm);
                    JOptionPane.showMessageDialog(null, "Nome: " + al.nome + "\nCurso: " + al.curso + "\nEndereço: " + al.endereco);
                    break;
                case 0:
                    return;
                default:
                    JOptionPane.showMessageDialog(null, "Valor Invalido!");
                    continue;
            }
        }
    }

    void cadastrar(Aluno al) {
        aluno.add(al);
    }

    private Aluno consultar(String rgm) {//mudei o parametro para uma String
        Aluno aux;
        for (int i = 0; i < aluno.size(); i++) {
            aux = (Aluno) aluno.get(i);
            if (rgm.equals(aux.rgm)) {//comparo se a String é igual ao rgm do aluno, se nao for sai do for
                return aux;
            }//aqui tinhas colocado um else com um break dentro, isso está errado, se ele vir aqui, e nao cair no if, irá pro else, que irá ter um break e vai sair do for, ou seja, sempre iria executar uma vez só o teu for, e se o rgm nao fosse o primeiro, iria sair e dizer //que nao existe nenhum aluno com esse rgm
        }
        JOptionPane.showMessageDialog(null, "Nenhum Aluno encontrado!");
        return null;
    }
}
T

Muito Obrigado cara o/

deu certinho aqui, vlw mesmo _

grato!

Criado 29 de novembro de 2012
Ultima resposta 29 de nov. de 2012
Respostas 2
Participantes 2