Erro em construtor e entrada de dados.
Estou fazendo um código, estudando, para entrar com dados porém há erros quando executo e não sei o motivo do compilador pedir um construtor vazio se já existe um montado com os parâmetros. Getters e setters estão na classe Aluno, os métodos na classe Disciplina, tudo dentro do mesmo pacote. Obrigado.
package pck; import java.util.Scanner; import pck.Disciplina; import pck.Aluno; public class main { public static void main(String[] args) { Disciplina disciplina = new Disciplina(); //Aluno aluno = new Aluno(); //Aluno a1 = new Aluno("Ricardo", 31, 1); //Aluno a1 = null; //Aluno a2 = new Aluno("Ana Elisa", 17, 1); //Aluno a3 = new Aluno("Geovana", 18, 2); //Aluno a4 = new Aluno("Livia", 20, 2); Scanner sc = new Scanner(System.in); System.out.println("Enter com a quantidade de alunos: "); int a = sc.nextInt(); Aluno[] alunos = new Aluno[a]; for (a = 0;a < alunos.length;a++) { Aluno aluno = new Aluno();// o construtor está na classe Aluno, como pode estar indefinido? Pedindo construtor vazio porque? System.out.println("Entre com o nome, a idade e a disciplina: "); String nome = sc.nextLine(); int idade = sc.nextInt();//erro na entrada de dados. mismach. int turma = sc.nextInt(); String NomeDisciplina = sc.nextLine(); //disciplina.adicionarAluno(nome,idade,turma, nomeDisciplina); disciplina.adicionarAluno(aluno); } //disciplina.adicionarAluno(a2); //disciplina.adicionarAluno(a3); //disciplina.adicionarAluno(a4); System.out.println("Quantidade de alunos: " + disciplina.getNumAlunos()); disciplina.exibirInformacoes(); System.out.println("Antes de remover alunos. "); //removendo aluno //disciplina.removerAluno(a2); System.out.println("Despois de remover alunos. "); disciplina.exibirInformacoes(); System.out.println("Quantidade de alunos: " + disciplina.getNumAlunos() + "\n"); System.exit(0); } } package pck; import pck.Disciplina; public class Aluno { private String nome; private String NomeDisciplina; private int idade, turma; public Aluno(String nome, String nomeDisciplina, int idade, int turma) { this.nome = nome; this.NomeDisciplina = nomeDisciplina; this.idade = idade; this.turma = turma; } public Aluno() { } public void setNome(String nome) {// atribui um valor para o atributo nome. if(nome == null || nome.isEmpty() || nome.isBlank()){ System.out.println("Valor deve ser preenchido"); return; } this.nome = nome; } public String getNome() { if(nome == null || nome.isEmpty() || nome.isBlank()){ System.out.println("Valor do nome não foi preenchido"); return ""; } return nome; } public String getNomeDisciplina() {//Disciplina return NomeDisciplina; } public void setNomeDisciplina(String NomeDisciplina) {//set de disciplina this.NomeDisciplina = NomeDisciplina; } public void setIdade(int idade) { this.idade = idade; } public int getIdade() { return idade; } public void setTurma(int turma) { this.turma = turma; } public int getTurma() { return turma; } public String mostrarInformacoes() { return "Nome: " + getNome() + "\nIdade: " + getIdade() + "\nTurma: " + getTurma() + "\n" + "##############"; } } package pck; public class Disciplina { private Aluno[] alunos; private Disciplina[] disciplina = new Disciplina[10]; private int posicao; public Disciplina() { this.alunos = new Aluno[40];//construtor, quando cria a disciplina, cria automaticamente um vetor Aluno de 40 posições. //Disciplina disciplina = new Disciplina(); } public int getNumAlunos() { int cont = 0; for (int i = 0; i < alunos.length; i++) { if(alunos[i] != null) {//se a posição é diferente de null não conta. cont++; } } return cont;//retorna o número de alunos. } /* public void adicionarAluno(Aluno aluno) { if(alunos != null){ this.alunos[posicao] = aluno; posicao = posicao + 1; //return true; } else { System.out.println("Valor deve ser preenchido"); //return false;//aluno não foi adicionado. } } */ public boolean adicionarAluno(Aluno aluno) { if(alunos != null){ this.alunos[posicao] = aluno; posicao = posicao + 1; return true; } else { System.out.println("Valor deve ser preenchido"); return false;//aluno não foi adicionado. } } public boolean removerAluno(Aluno aluno) {//verifica sem existe nome, idade, e turma, as três tem de ser verificadas, pois podem haver repetições. for(int i = 0; i < alunos.length; i++) {//para remover o aluno do vetor. Excluindo pelo nome, idade e turma. if((alunos[i].getNome() == aluno.getNome()) && (alunos[i].getIdade() == aluno.getIdade()) && (alunos[i].getTurma() == aluno.getTurma()) && (alunos[i].getNomeDisciplina() == aluno.getNomeDisciplina())) { alunos[i] = null;//remove um aluno return true; } //aqui não podemos, após esta chave, por causa da posição do vetor, por exemplo, aluno na posição 3. //por causa da iteração, o for não estará na posição 0. Pode estar em outra posição. Ele pode não estar na posição 0 e retorna false, //queremos que percorra todo o vetor e não encontrar a condição do if acima. } return false;//caso não encontre na primeira posição, pode estar em outra posição de 0 a 4. Tem de percorrer todo o vetor e não cair dentro do if. //por isso não tem o else e o return está fora da condição. False é porque não está no vetor. } //exibir as informações de todos os alunos. public void exibirInformacoes() { for (int i = 0; i < alunos.length;i++) { if (alunos[i] != null)//if para evitar exceção se a posição for null pela informação removida, pois a posição não tem mais dados, está vazia. System.out.println(alunos[i].mostrarInformacoes());//chama o método já pronto mostrarInformações que está na classe Aluno. Mostra somente posições com valores. } } }
Paulo
Curtidas 0
Respostas
Augustomesquita
11/04/2022
Não entendi... qual exatamente é o erro? Existem diversas classes no código postado. Poderia colar a mensagem de erro aqui?
GOSTEI 0
Augustomesquita
11/04/2022
Bom, tentando responder com as informações disponíveis, se o problema for que o compilador está reclamando que precisa de um construtor vazio em Aluno na linha 24:
Ele está agindo da forma como deveria, pois você está instânciando um objeto Aluno sem parâmetros. Para ele não reclamar, você teria que construir o objeto Aluno utilizando o construtor com parâmetros que você definiu. Exemplo:
Aluno aluno = new Aluno();
Ele está agindo da forma como deveria, pois você está instânciando um objeto Aluno sem parâmetros. Para ele não reclamar, você teria que construir o objeto Aluno utilizando o construtor com parâmetros que você definiu. Exemplo:
Aluno aluno = new Aluno("Augusto", "Estrutura de Dados", 30, 1);
GOSTEI 0
Augustomesquita
11/04/2022
Bom, tentando responder com as informações disponíveis, se o problema for que o compilador está reclamando que precisa de um construtor vazio em Aluno na linha 24:
Aluno aluno = new Aluno();
Ele está agindo da forma como deveria, pois você está instânciando um objeto Aluno sem parâmetros. Para ele não reclamar, você teria que construir o objeto Aluno utilizando o construtor com parâmetros que você definiu. Exemplo:
Aluno aluno = new Aluno("Augusto", "Estrutura de Dados", 30, 1);
Aluno aluno = new Aluno();
Ele está agindo da forma como deveria, pois você está instânciando um objeto Aluno sem parâmetros. Para ele não reclamar, você teria que construir o objeto Aluno utilizando o construtor com parâmetros que você definiu. Exemplo:
Aluno aluno = new Aluno("Augusto", "Estrutura de Dados", 30, 1);
GOSTEI 0
Paulo
11/04/2022
Isso corrigi, obrigado pela resposta, porém quando tento entrar com a idade ele apresenta erro como estivesse ultrapassando o tamanho do vetor. O vetor está delcarado na classe Disciplina com 40 posições.
O construtor está na classe Aluno, porém o erro na entrada do inteiro idade continua. O resto eu vou verificar para conxertar, obrigado.
public Aluno(String nome, String NomeDisciplina, int idade, int turma) { this.nome = nome; this.NomeDisciplina = NomeDisciplina; this.idade = idade; this.turma = turma; }
O construtor está na classe Aluno, porém o erro na entrada do inteiro idade continua. O resto eu vou verificar para conxertar, obrigado.
GOSTEI 0