Registro Acadêmico [RESOLVIDO]

[b]Estou com outro problema, agora com um programa de Registro Acadêmico.

O código é o seguinte:[/b]

[code]public class RegistroAcademico {

private String nomeDoAluno, numeroDeMatricula;
private boolean eBolsista;
private int anoDeMatricula;
private Data dataDeNascimento;

public RegistroAcademico (String nome, String matricula, boolean bolsa, int ano, Data d1){
	nomeDoAluno = nome;
	numeroDeMatricula = matricula;
	eBolsista = bolsa;
	anoDeMatricula = ano;
	dataDeNascimento = d1;
}

public double calculaMensalidade (){
	double mensalidade = 400;
	if (eBolsista == true){
		mensalidade = mensalidade/2;
	}
	return mensalidade;
}

public void mostraRegistro (){
	System.out.println ("Nome do Aluno: " + nomeDoAluno);
	System.out.println ("Matricula: " + numeroDeMatricula);
	if (eBolsista == true){
		System.out.println ("O aluno é bolsista.");
	}
	else
		System.out.println ("O aluno não é bolsista.");
	System.out.println ("Mensalidade: " + calculaMensalidade ());
	System.out.println ("Ano de Matrícula: " + anoDeMatricula);
	System.out.println ("Data de Nascimento: " + dataDeNascimento.imprimeData ());
}

}[/code]


[code]public class Data {

private int dia, mes, ano;
public Data (int d, int m, int a){
	if (dataEValida (d, m)){
		dia = d;
		mes = m;
		ano = a;
	}
	else{
		dia = 0;
		mes = 0;
		ano = 0;
	}
}

public boolean dataEValida (int d, int m){
	if ((d>=1)&&(d<=31)&&(m>=1)&&(m<=12)){
		return true;
	}
	else
		return false;
}

public void imprimeData (){
	System.out.printf("A data é: %d/%d/%d\n\n", dia, mes, ano);
}

}[/code]


[code]public class Main {

public static void main(String[] args) {
	
	Data d1 = new Data (22,9,1988);
	RegistroAcademico aluno1 = new RegistroAcademico ("Luiza", "08.2.8032", true, 2008, d1);
	
	aluno1.mostraRegistro();
	
}

}[/code]


Quando eu rodo o programa, aparece um erro assim:

[i]Exception in thread “main” java.lang.Error: Unresolved compilation problem:
The operator + is undefined for the argument type(s) String, void

at pkgRegistroAcademico.RegistroAcademico.mostraRegistro(RegistroAcademico.java:36)
at pkgRegistroAcademico.Main.main(Main.java:10)[/i]

Não sei o que pode ser, alguma idéia?

faltou vc abrir a “{” do else!

Olha onde tá comentado:

public void mostraRegistro (){ System.out.println ("Nome do Aluno: " + nomeDoAluno); System.out.println ("Matricula: " + numeroDeMatricula); if (eBolsista == true){ System.out.println ("O aluno é bolsista."); } else //AKI VC NÃO ABRIU AS CHAVES... System.out.println ("O aluno não é bolsista."); System.out.println ("Mensalidade: " + calculaMensalidade ()); System.out.println ("Ano de Matrícula: " + anoDeMatricula); System.out.println ("Data de Nascimento: " + dataDeNascimento.imprimeData ()); }

[quote=pedroroxd]Olha onde tá comentado:

public void mostraRegistro (){ System.out.println ("Nome do Aluno: " + nomeDoAluno); System.out.println ("Matricula: " + numeroDeMatricula); if (eBolsista == true){ System.out.println ("O aluno é bolsista."); } else //AKI VC NÃO ABRIU AS CHAVES... System.out.println ("O aluno não é bolsista."); System.out.println ("Mensalidade: " + calculaMensalidade ()); System.out.println ("Ano de Matrícula: " + anoDeMatricula); System.out.println ("Data de Nascimento: " + dataDeNascimento.imprimeData ()); } [/quote]

Fiz isso que vc falou das chaves, mas continua dando erro… Acho que pode ser alguma coisa quando eu mando imprimir a data…

O erro está aki:
System.out.println ("Data de Nascimento: " + dataDeNascimento.imprimeData());

É impossivel vc printar algo do tipo void (o imprimeData() é void).

[quote=pedroroxd]O que é isso no main?
aluno1.mostraRegistro(); [/quote]

Eu criei um objeto aluno1 e chamei o mostraRegistro para imprimir na tela os atributos que defini antecipadamente pra ele…

Na linha 34 da classe RegistroAcademico, você chama o método Data.imprimeData(), concatenando o retorno desse método com uma String, porém o método não possui retorno. Minha sugestão é você reimplementar esse método retornando uma String.

E porque você está implementando sua própria classe de data? Não é melhor usar java.util.Date ou java.util.Calendar?

[quote=pedroroxd]O erro está aki:
System.out.println ("Data de Nascimento: " + dataDeNascimento.imprimeData());

É impossivel vc printar algo do tipo void (o imprimeData() é void).[/quote]
A solução é vc alterar o imprimeData para isso:

public String imprimeData (){ return("A data é: " + dia + "/" + mes+ "/" + ano); }

Saída:
Nome do Aluno: Luiza
Matricula: 08.2.8032
O aluno é bolsista.
Mensalidade: 200.0
Ano de Matrícula: 2008
Data de Nascimento: A data é: 22/9/1988

[quote=juliofsn]Na linha 34 da classe RegistroAcademico, você chama o método Data.imprimeData(), concatenando o retorno desse método com uma String, porém o método não possui retorno. Minha sugestão é você reimplementar esse método retornando uma String.

E porque você está implementando sua própria classe de data? Não é melhor usar java.util.Date ou java.util.Calendar?[/quote]

[b]Faz parte do exercicio que eu to fazendo implementar também a classe Data…

Vou tentar colocar retornando uma string…[/b]

Só altera o método para isso:

public String imprimeData (){ return("A data é: " + dia + "/" + mes+ "/" + ano); }

[quote=pedroroxd]Só altera o método para isso:

public String imprimeData (){ return("A data é: " + dia + "/" + mes+ "/" + ano); } [/quote]

Deu certinho fazendo assim! Realmente, colocando como void ia ser difícil dar certo! Obrigada pela ajuda!