Galera, boa noite
Estou começando a aprender java e com o auxilio da apostila do CAELUM estou na etapa de “Modificadores de acesso e atributos de classe”.
Juntamente com a apostila estou fazendo alguns exercícios para aprimorar mais o que estou aprendendo.
Porém nessa etapa fiquei parado em um exercício, o qual aparentemente parece estar tudo ok, porém ao compilar - pelo eclipse LOMBOZ - o mesmo me retorna o seguinte erro:
"
4300.0
Exception in thread “main” java.lang.NullPointerException
at MainPackage.Conta.imprimeBanco(Conta.java:27)
at MainPackage.SacaEDeposita.main(SacaEDeposita.java:18)
"
O programa segue em sequencia, para os que puderem me ajudar:
[b]public class SacaEDeposita {
public static void main(String [] args){
//Criando conta
Conta minhaConta = new Conta();
Cliente client = new Cliente();
client.setNome("DUKE");
minhaConta.setSaldo(1000);
minhaConta.setLimite(3000);
//Saca 200 reais
minhaConta.Saca(200);
//Deposita 200 reais
minhaConta.Deposita(500);
System.out.println(minhaConta.getLimite()+minhaConta.getSaldo());
//Imprime nome e saldo do proprietário da conta
minhaConta.imprimeBanco();
}
}[/b]
[b]public class Conta{
private int numero;
Cliente cliente;
private double saldo;
private double limite;
public double getSaldo(){
return this.saldo;
}
public void setSaldo(double saldo){
this.saldo=saldo;
}
public double getLimite(){
return this.limite;
}
public void setLimite(double limite){
this.limite=limite;
}
public void imprimeBanco(){
System.out.println("Essa conta é do banco J e o saldo da conta do(a)" +
" senhor(a) "+cliente.getNome()+" é de: "+ getSaldo());
}
public boolean Saca(double valor){
if(this.saldo<valor){
return false;
}
else{
this.saldo=this.saldo-valor;
return true;
}
}
public int getNumero(){
return this.numero;
}
public void setNumero(int number){
this.numero=number;
}
public void Deposita(double quantia){
if(quantia<=0){
System.out.println("Não é possivel creditar o valor");
}
else{
this.saldo+=quantia;
}
}
public void transfere(Conta destino, double valor){
if(this.saldo< valor && (this.saldo+this.limite)< valor){
System.out.printf("%2ds","Saldo insuficiente",(this.saldo+this.limite));
}
if(this.saldo<valor && this.limite>=valor ){
System.out.println("Transferência consedida, porém o seu limite especial" +
" no banco passou a ser de de "+(this.limite-valor));
}
}
}[/b]
Já entendi que o problema está no método imprimeBanco(), porém, aparentemente está tudo correto.
Agradeço desde já a atenção.
Rafael.
No método "imrimeBanco()" você chama um método do objeto cliente :
cliente.getNome()
O problema é que seu objeto cliente não foi instanciado e por isso está dando NullPointerException. A referência guardada na variávgel "cliente" é nula, você deve instanciá-la antes de usar. Você poderia resolver isso simplesmente instanciando o objeto cliente (Ciente cliente = new Clietne()) na sua classe Conta. Mas o código que você passou parece estar faltando algo. Qual é a relação entre Conte e Cliente? Acho que você deveria criar a conta passando o cliente como parâmetro no constructor, ou o contrário, mas um deve ter referência para o outro.
Assim funciona:
public class SacaEDeposita {
public static void main(String [] args){
// criando o cliente e dando um nome
Cliente client = new Cliente();
// Criando conta
Conta minhaConta = new Conta(client);
client.setNome("DUKE");
minhaConta.setSaldo(1000);
minhaConta.setLimite(3000);
// Saca 200 reais
minhaConta.Saca(200);
// Deposita 200 reais
minhaConta.Deposita(500);
System.out.println(minhaConta.getLimite()+minhaConta.getSaldo());
// Imprime nome e saldo do proprietário da conta
minhaConta.imprimeBanco();
}
}
public class Conta {
private int numero;
Cliente cliente;
private double saldo;
private double limite;
public Conta(Cliente cliente){
this.cliente = cliente;
}
public double getSaldo() {
return this.saldo;
}
public void setSaldo(double saldo) {
this.saldo = saldo;
}
public double getLimite() {
return this.limite;
}
public void setLimite(double limite) {
this.limite = limite;
}
public void imprimeBanco() {
System.out.println("Essa conta é do banco J e o saldo da conta do(a)"
+ " senhor(a) " + cliente.getNome() + " é de: " + getSaldo());
}
public boolean Saca(double valor) {
if (this.saldo < valor) {
return false;
} else {
this.saldo = this.saldo - valor;
return true;
}
}
public int getNumero() {
return this.numero;
}
public void setNumero(int number) {
this.numero = number;
}
public void Deposita(double quantia) {
if (quantia <= 0) {
System.out.println("Não é possivel creditar o valor");
} else {
this.saldo += quantia;
}
}
public void transfere(Conta destino, double valor) {
if (this.saldo < valor && (this.saldo + this.limite) < valor) {
System.out.printf("%2ds", "Saldo insuficiente",
(this.saldo + this.limite));
}
if (this.saldo < valor && this.limite >= valor) {
System.out
.println("Transferência consedida, porém o seu limite especial"
+ " no banco passou a ser de de "
+ (this.limite - valor));
}
}
}
public class Cliente {
private String nome;
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
}
Ok
Muito obrigado pela ajuda.
De fato estava faltando o parametro client no construtor, e eu também havia esquecido de mandar a classe Cliente.
Já rodei e funcionou, após eu ter instanciado o objeto cliente.
Rafael.