Ajuda com array de objetos

5 respostas
F

Ola, estou criando um sistema de armazenamento de notas e medias, a minha ideia é guarda em um array de alunos nome, p1(nota da prova1), p2(nota da prova2), ps(sub), mediafinal e media geral.
porem ele nao esta acumulando o valor…
eis o codigo

public class listaDeResultados { 
public String aluno, p1, p2, ps, mediafinal, mediaGeral;
    
    private listaDeResultados alunos[] = new listaDeResultados[100];
    private int posicao=0;
    
    public void armazena(String nome, double p1, double p2, double ps, double mediaFinal, double mediaGeral){ //Armazena os objetos no array
        
        alunos[posicao].aluno = nome;
        alunos[posicao].p1 = String.valueOf(p1);
        alunos[posicao].p2 = String.valueOf(p2);
        alunos[posicao].ps = String.valueOf(ps);
        alunos[posicao].mediafinal = String.valueOf(mediaFinal);
        alunos[posicao].mediaGeral = String.valueOf(mediaGeral);
        
        
        posicao++;
    }

Aqui é a clasa onde eu implemente o JFrame e os actionListeners e este é o bloco que quando o usuario clika em salvar deveria ser enviado os dados para o array e o botao muda para novo aluno.

if(e.getSource()==Salvar){
                alunos.armazena(alunoT.getText(), Double.parseDouble(p1T.getText()), Double.parseDouble(p2T.getText()), 
                 Double.parseDouble(psT.getText()), Double.parseDouble(mediaFinalT.getText()),Double.parseDouble(mediaGeralT.getText()));
                        
                                   addAluno.setVisible(true);
                                   Salvar.setVisible(false);
        }

Tentei procurar alguma coisa relacionado e num achei =/
Obrigado.

5 Respostas

igor_ks

Acho que vc está esquecendo da orientação a objetos, por que não cria uma classe Alunos, com atributos?

gustavo_mb

Não está acumulando qual valor? Poste a sua classe de teste!

Pelo que percebi com os dados que passou, você deve fazer isso:

private static int posicao = 0;

As variáveis de instância(que estão dentro do escopo da classe) pertencem a cada objeto individualmente. Declarando a variável como static ela passa a pertencer a classe.

F

A intençao é

alunos[posicao].aluno = nome;                                         //acumula aluno[0].nome o nome do aluno que vai estar digitado no TextField
        alunos[posicao].p1 = String.valueOf(p1);                           //e assim por diante
        alunos[posicao].p2 = String.valueOf(p2);
        alunos[posicao].ps = String.valueOf(ps);
        alunos[posicao].mediafinal = String.valueOf(mediaFinal);
        alunos[posicao].mediaGeral = String.valueOf(mediaGeral);

posicao++;   //ao final do bloco ele add 1 na varialvel e na prxma vez que ele digita os dados sejam acumulados na posicao 1
gustavo_mb

Foi exatamente assim que eu havia entendido…

Já tentou o que eu disse? Qual foi o resultado? Poste sua classe de teste.

F

este bloco esta dentro da clase que eu fiz o JFrame a

public void actionPerformed(ActionEvent e) {


        if (e.getSource() == addAluno) {    //apaga os campos para adicionar um novo aluno
            addAluno.setVisible(false);
            Salvar.setVisible(true);
            p1T.setText(null);
            p2T.setText(null);
            psT.setText(null);
            mediaFinalT.setText(null);
            alunoT.setText(null);

        }
        if (e.getSource() == Salvar) { //envia os dados p/ o array 

            addAluno.setVisible(true);
            Salvar.setVisible(false);
            alunos.armazena(alunoT.getText(), Double.parseDouble(p1T.getText()), Double.parseDouble(p2T.getText()),
                    Double.parseDouble(psT.getText()), Double.parseDouble(mediaFinalT.getText()), Double.parseDouble(mediaGeralT.getText()));
            
            alunos.proximo(); //adicionei um procedimento p/ add1
        }
        

            if (e.getSource() == anterior) {
            
            alunoT.setText(alunos.aluno);
            p1T.setText(alunos.p1);
            p2T.setText(alunos.p2);
            psT.setText(alunos.ps);
            mediaFinalT.setText(alunos.mediafinal);
        }

agora onde a classe que esta implementado os metodos

public class listaDeResultados {
    public String aluno, p1, p2, ps, mediafinal, mediaGeral;
    
    private listaDeResultados alunos[] = new listaDeResultados[100];
    private static int posicao=0;
    
    public void armazena(String nome, double p1, double p2, double ps, double mediaFinal, double mediaGeral){
        
        alunos[posicao].aluno = nome;
        alunos[posicao].p1 = String.valueOf(p1);
        alunos[posicao].p2 = String.valueOf(p2);
        alunos[posicao].ps = String.valueOf(ps);
        alunos[posicao].mediafinal = String.valueOf(mediaFinal);
        alunos[posicao].mediaGeral = String.valueOf(mediaGeral);
        
        
        //posicao++;
        System.out.println("---------------------------------> "+posicao);
    }
   

      public void proximo(){ //add 1 na posiçao
        
        posicao++;
    }


    public String anterior(listaDeResultados alunos[]){ //exibe os dados que foram setados anteriormente
        alunos[posicao-1].aluno = this.aluno;
        alunos[posicao-1].p1 = String.valueOf(p1);
        alunos[posicao-1].p2 = String.valueOf(p2);
        alunos[posicao-1].ps = String.valueOf(ps);
        alunos[posicao-1].mediafinal = String.valueOf(this.mediafinal);
        alunos[posicao-1].mediaGeral = String.valueOf(mediaGeral);
         
       return String.valueOf(alunos[posicao-1]);
    }
}

tem mais uma clase que calcula a media e a classe principal so contem o metodo main
tentei transformar a varial posicao static e tbm nao funcionou.

Criado 6 de outubro de 2011
Ultima resposta 6 de out. de 2011
Respostas 5
Participantes 3