Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Média das notas de Alunos usando JOptionPane

Prezados,

No intuito de realizar exercícios de fixação e aprimorar as habilidades em POO, me deparei com o seguinte exercício: Crie uma classe MediaAluno que contenha um atributo do tipo vetor de inteiros com o nome de notas. Essa classe deve ter um método para adicionar as notas nesse vetor (os valores que podem ser adicionados no vetor são os inteiros entre 0 e 100, caso contrário imprime uma mensagem de erro e não adiciona) e outro método que calcule a média de um aluno e imprima essa média. Os valores de entrada e saída deverão usar JOptionPane do javax.

Comecei criando 2 classes sendo uma delas a main:

package br.com.logica.programa.MediaAluno;

public class MediaAluno {
    /**
     * Essa classe é para testar lógica de programação pelo caderno de exercício
     * "Exercícios JAVA" QUESTÃO 6: 
     * Crie uma classe MediaAluno que contenha um
     * atributo do tipo vetor de inteiros com o nome de notas. Essa classe deve
     * ter um método para adicionar as notas nesse vetor (os valores que podem
     * ser adicionados no vetor são os inteiros entre 0 e 100, caso contrário
     * imprime uma mensagem de erro e não adiciona) e outro método que calcule a
     * média de um aluno e imprima essa média.
     */
    private int QTD = 0;
    private int notas;


    public void setQTD(int qTD) {
        QTD = qTD;
    }

    public int getQTD() {
        return QTD;
    }

    public int getNotas() {
        return notas;
    }

    public void setNotas(int notas) {
        this.notas = notas;
    }
}

E a classe main:

package br.com.logica.programa.testeMediaAluno;

import javax.swing.JOptionPane;
import br.com.logica.programa.MediaAluno.MediaAluno;

public class testeMediaAluno {
    public static void main(String[] args) throws Exception{
       /**
     * Essa classe é para testar lógica de programação pelo caderno de exercício
     * "Exercícios JAVA" QUESTÃO 6: 
     * Crie uma classe MediaAluno que contenha um
     * atributo do tipo vetor de inteiros com o nome de notas. Essa classe deve
     * ter um método para adicionar as notas nesse vetor (os valores que podem
     * ser adicionados no vetor são os inteiros entre 0 e 100, caso contrário
     * imprime uma mensagem de erro e não adiciona) e outro método que calcule a
     * média de um aluno e imprima essa média.
     */

    MediaAluno ma = new MediaAluno();
    int soma = 0;


    JOptionPane.showMessageDialog(null,
            "Esse programa imprime MÉDIA de notas de um aluno \n"
            + "pela quantidade informada",
            "Programa comparador numérico", JOptionPane.NO_OPTION);

    ma.setQTD(Integer.parseInt(JOptionPane.showInputDialog("Digite a quantidade de notas \n"
            + "que o aluno deve ter")));
    if (ma.getQTD() > 100) {
        JOptionPane.showMessageDialog(null, "número superior", "Mensagem de erro", JOptionPane.ERROR_MESSAGE);
        return;
    }

    if (ma.getQTD() < 0) {
        JOptionPane.showMessageDialog(null, "número não permitido", "Mensagem de erro",
                JOptionPane.ERROR_MESSAGE);
        return;
    }

    int quantidade = ma.getQTD();
    MediaAluno nt[] = new MediaAluno[quantidade];
        for (int i = 0; i < quantidade; i++){
            nt[i].setNotas(Integer.parseInt(JOptionPane.showInputDialog("Digite as notas do aluno")));
            if (nt.length > 10) {
                JOptionPane.showMessageDialog(null, "número superior", "Mensagem de erro", JOptionPane.ERROR_MESSAGE);
                return;
            }

            if (nt.length < 0) {
                JOptionPane.showMessageDialog(null, "número não permitido", "Mensagem de erro",
                        JOptionPane.ERROR_MESSAGE);
                return;
            }
            soma+=nt[i].getNotas();
        }
    JOptionPane.showMessageDialog(null, "Média do Aluno é: \n" + soma / ma.getQTD());
    }
}

O que acontece é que meu código recebe um "Exception in thread "main" java.lang.NullPointerException" nesse trecho "nt[i].setNotas(Integer.parseInt(JOptionPane.showInputDialog("Digite as notas do aluno")));", quando usuário digita a nota. A partir desse momento não consegui entender o que acontece uma vez que o sistema fica em timeout ou acessa o modo debug. O que eu devo fazer?

3 respostas

Bom dia, para ter dado um nullpointer nesse ponto pode ser que nt[i] seja null ou alguém nessa linha está como null e você está tentando acessar um método ou propriedade dele. Debuga essa linha para ver se os valores estão corretos

solução!

Olá Fabiano, tudo bem?

Bom, vamos lá... Você criar uma array da classe MediaAluno e logo em seguida tenta acessar um método da classe, porém o método não é estático e você não instanciou um objeto da classe, apenas criou a variável de referencia.

Para isso, você deveria fazer algo como:

MediaAluno nt[] = new MediaAluno[quantidade];
for (int i = 0; i < quantidade; i++) {

nt[i] = new MediaAluno();

nt[i].setNotas(Integer.parseInt(JOptionPane.showInputDialog("Digite as notas do aluno")));

/**
* Resto do código ...
*/
}

Tente dessa forma.

Deu certissímo Caíque, muito obrigado