Abri um topico no forum para que me ajudasse em um programa de cadastro com array e consegui faze-lo. Fui tentar implementar o mesmo com construtores e o programa compila mas na hora da busca e listagem, não funciona
primeira parte (metodos)
import java.util.Scanner;
import java.util.ArrayList;
public class Aluno
{
int matricula;
int mat2;
String nome;
String data;
String end;
String email;
int i;
public Aluno (int matricula,String nome,String data,String end, String email)
{
this.matricula = matricula;
this.nome = nome;
this.data = data;
this.end = end;
this.email = email;
}
public void Busca (Aluno aluno[], int mat2)
{
for (i = 0; i <50; i++)
{
if(mat2 == aluno[i].matricula)
{
System.out.println ("Matricula " +aluno[i].matricula);
System.out.println ("Nome " +aluno[i].nome);
System.out.println ("Data de nascimento " +aluno[i].data);
System.out.println ("Endereço " +aluno[i].end);
System.out.println ("Email " +aluno[i].email);
System.out.print("\n\n");
break;
}
else {
System.out.print("\n\n");
System.out.println("Aluno nao cadastrado \n");
System.out.print("\n\n");
break;
}
}
}
}
segunda parte (main)
[code]
import java.util.Scanner;
import java.util.ArrayList;
public class Cadastro
{
public static void main (String args[])
{
Scanner input = new Scanner (System.in);
Aluno[] aluno = new Aluno[50]; //Variavel do tipo da classe do outro programa
int op;
int i = 0;
int mat2;
int matricula;
String nome;
String data;
String end;
String email;
Aluno al;
do
{
System.out.print ("1-Criar cadastro\n2-Procurar matricula\n3-Listar\n0-Sair");
System.out.print("\n\n");
op = Integer.parseInt (input.nextLine ());
System.out.print("\n");
switch (op)
{
case 1: if (i >=50) // CADASTRO
{
System.out.print ("Capacidade esgotada \n");
break;
}
else {
// aluno [i] = new Aluno(); // cada laço, cria um novo Aluno
// Scanner input = new Scanner (System.in);
System.out.print ("Digite sua matricula \n\n"); //MATRICULA
matricula = Integer.parseInt (input.nextLine ());
System.out.print("\n");
System.out.println("Digite o seu nome \n\n"); // NOME
nome = input.nextLine();
System.out.print("\n");
System.out.print ("Digite a data de nascimento \n\n"); //DATA
data = input.nextLine();
System.out.print("\n");
System.out.println("Digite o seu endereço \n\n"); // ENDEREÇO
end = input.nextLine();
System.out.print("\n");
System.out.println("Digite o seu email \n\n"); // EMAIL
email = input.nextLine();
System.out.print("\n");
i++;
break;
}
case 2: // BUSCA
System.out.print("Digite a matricula \n");
mat2 = Integer.parseInt (input.nextLine ());
System.out.print("\n\n");
aluno[0].Busca(aluno,mat2); //PASSA O ALUNO 0 PARA O METODO E LA É REALIZADO O PERCORRIMENTO DO ALUNO
break;
case 3: // LISTAGEM
for (i = 0; i < 50;i++)
{
if (aluno[i] != null)
{
System.out.println (aluno[i].matricula);
System.out.println (aluno[i].nome);
System.out.println (aluno[i].data);
System.out.println (aluno[i].end);
System.out.println (aluno[i].email);
System.out.print("\n\n");
}
}
break;
}
}while (op !=0);
}
}[/code]
na hora da listagem ele não lista nada e na hora da busca ele da erro de pointer null
//Classe que simula cadastro de alunos de um curso universitário
import java.util.Scanner;
import java.util.ArrayList;
public class CadastroAlunos{
//Atributos da classe
private int Matricula;
private String NomeAluno;
private String DataNasc;
private String Endereco;
private String Email;
//Metodo Construtor
public CadastroAlunos (int matr, String nome, String data, String end, String emai){
Matricula = matr;
NomeAluno = nome;
DataNasc = data;
Endereco = end;
Email = emai;
}
int pos=0;
public int getMatricula()
{
return Matricula;
}
public void setMatricula (int Matricula)
{
this.Matricula = Matricula;
}
public String getNomeAluno()
{
return NomeAluno;
}
public void setNome (String NomeAluno)
{
this.NomeAluno=NomeAluno;
}
public String getDataNasc()
{
return DataNasc;
}
public void setDataNasc (String DataNasc)
{
DataNasc=DataNasc;
}
public String getEndereco()
{
return Endereco;
}
public void setEndereco (String Endereco)
{
Endereco=Endereco;
}
public String getEmail()
{
return Email;
}
public void setEmail (String Email)
{
Email=Email;
}
public void Imprime(){
System.out.printf("\nMatricula: %d\n", Matricula);
System.out.printf("\tNome do Aluno: %s\n", NomeAluno);
System.out.printf("\tData de nascimento: %s\n", DataNasc);
System.out.printf("\tEndereco: %s\n", Endereco);
System.out.printf("\tE-mail: %s\n", Email);
System.out.print("\n\n");
}
}
segunda parte (onde tem erros)
import java.util.Scanner;
import java.util.ArrayList;
public class AplicativoCadastro
{
public static void main (String []arg)
{
Scanner input = new Scanner(System.in);
Scanner oper = new Scanner(System.in);
CadastroAlunos Aluno[];
Aluno = new CadastroAlunos[50]; //
int op;
int i=0;
int matp;
int matricula;
String NomeAluno;
String DataNasc;
String Endereco;
String Email;
do{
System.out.print("\n\n###CADASTRO DOS ALUNOS###\n\n");
System.out.print("\n1 - Cadastrar aluno \n2 - Listar todos os alunos cadastrados \n3 - Buscar aluno pela matricula \n4 - Sair do programa \nDigite sua opcao: ");
op = Integer.parseInt(oper.nextLine());
switch(op){
case 1: if(i > 50){
System.out.print("\nNao ha mais vagas para o curso - todas as 50 vagas foram preenchidas!\n");
}
else{
Aluno aluno = new CadastroAlunos(); // ******ERRO AQUII *******
CadastroAlunos al = new CadastroAlunos(); // ******ERRO AQUII *******
i++;
}
break;
case 2: System.out.print("\n\n###LISTA DOS ALUNOS###\n\n");
for (i=0; i<50; i++){
Aluno[i].Imprime();
}
break;
case 3: System.out.print("\nInforme a matricula para consulta: \n");
matp = Integer.parseInt(input.nextLine());
int pos=0;
for (pos=0; pos<50; pos++){
if(matp == Aluno[pos].getMatricula()){
Aluno[pos].Imprime();}
}
break;
case 0: System.out.println("\nSaindo do programa\n");
break;
}
}while(op!=0);
}
}
coloquei mais ou menos como vi numa apostila. delclarar uma variavel do tipo aluno e instanciar. e como eu faria na segunda parte (MAIN) para colocar o nome, matricula etc?
Quando você cria uma classe, se você não criar nenhum construtor, a JVM irá criar um construtor básico sem nenhum parâmetro automaticamente. Você poderá chamar
class SemConstrutor{}
class Teste{
public static void main(String args[]){
SemConstrutor sc = new SemConstrutor(); /*Criado automaticamente*/
}
}
Mas se você criar qualquer construtor com qualquer quantidade de parâmetros, a JVM não vai criar nenhum construtor automático sem parâmetros.
Aí neste caso, a sua chamada a
é certo isso? ou com get set não precisa? não achei isso na minha apostil
ai no main ficou isso o cadastro
[code]switch(op){
case 1: if(i > 50){
System.out.print("\nNao ha mais vagas para o curso - todas as 50 vagas foram preenchidas!\n");
}
else{
for (i = 0; i<50; i++)
{
Aluno[i] = new CadastroAlunos();
System.out.print (“Digite sua matricula \n\n”); //MATRICULA
Matricula = Integer.parseInt (input.nextLine ());
System.out.print("\n");
System.out.println(“Digite o seu nome \n\n”); // NOME
NomeAluno = input.nextLine();
System.out.print("\n");
System.out.print (“Digite a data de nascimento \n\n”); //DATA
DataNasc = input.nextLine();
System.out.print("\n");
System.out.println(“Digite o seu endereço \n\n”); // ENDEREÇO
Endereco = input.nextLine();
System.out.print("\n");
System.out.println(“Digite o seu email \n\n”); // EMAIL
Email = input.nextLine();
System.out.print("\n");
Aluno[i].Cadastro (Matricula,NomeAluno,DataNasc,Endereco,Email);
i++;
break;
}
}
[/code]
ele compila certo, consigo cadastra, mas quando termina o email, ele imprime os dados e da erro de pointer null
pela minha logica, a cada laço, eu cri um aluno e passo ele pro metodo de cadastro. em C seria mais ou menos isso
Man, vc está indo no caminho certo, eu removeria esse construtor e criaria um vazio.
Vc vai precisar de um List para guardar as referências de seus objetos e dar um new no objeto sempre que entrar no switch e jogar dentro de seu List, essa é a única forma de recuperar os registros e exibir no console.
Tente seguir as boas práticas e criar variáveis com letra minúscula.
ou - assim:
switch (op) {
case 1:
if (qtdeCadastros >= 50) // CADASTRO
{
System.out.print("Capacidade esgotada \n");
break;
} else {
Aluno aluno = new Aluno();
System.out.print("Digite sua matricula \n\n"); // MATRICULA
matricula = Integer.parseInt(input.nextLine());
System.out.print("\n");
System.out.println("Digite o seu nome \n\n"); // NOME
nome = input.nextLine();
System.out.print("\n");
System.out.print("Digite a data de nascimento \n\n"); // DATA
data = input.nextLine();
System.out.print("\n");
System.out.println("Digite o seu endereço \n\n"); // ENDEREÇO
end = input.nextLine();
System.out.print("\n");
System.out.println("Digite o seu email \n\n"); // EMAIL
email = input.nextLine();
System.out.print("\n");
qtdeCadastros++;
aluno.setMatricula(matricula);
aluno.setNome(nome);
aluno.setData(data);
aluno.setEnd(end);
aluno.setEmail(email);
alunos.add(aluno);
break;
}