Passar objeto como parâmetro?

Boa noite amigos, estou tentando simular um pequeno sistema bancário, simples, onde preciso passar para uma classe “Conta” um objeto “cliente”, porém não há um erro ao tentar fazer isso.
Caso alguém possa me ajudar, segue a classe Conta e a Main…O erro está na linha 71 da classe main, quando passo “cliente” para o construtor da classe.

[code]
import java.util.Scanner;
import java.util.ArrayList;

public class BancoMain {

ArrayList<Cliente> cl;
ArrayList<Conta> cc;
Scanner in;

public BancoMain(){
	cl = new ArrayList();
	cc = new ArrayList();
	in = new Scanner(System.in);
}

public static void main(String[] args) {
	
	int op;
	
	Scanner opcao = new Scanner(System.in);
	BancoMain b = new BancoMain();
	
		System.out.print("\n***** Banco RoubaBem iLtda *****");
		System.out.print("\n\nDigite a opcao desejada: ");
		System.out.print("\n1 - Cadastrar Cliente;");
		System.out.print("\n2 - Cadastrar nova Conta;");
		System.out.print("\n3 - Alterar dados de Cliente;");
		System.out.print("\n4 - Alterar dados da Conta;");
		System.out.print("\n5 - Excluir Cliente;");
		System.out.print("\n6 - Exluir Conta;");
		System.out.print("\n0 - Encerrar o Sistema;");
		op = opcao.nextInt();
		switch(op){
		case 1: 
			b.cadastraCliente();
			break;
			
		case 2:
			b.novaConta();
			break;
	}
}

	public void cadastraCliente(){
		String nome;
		String cpf;
		String email;
		
		System.out.print("\n\nDigite o cpf do Cliente: ");
		cpf = in.nextLine();
		System.out.print("\nDigite o nome do Cliente: ");
		nome = in.nextLine();
		System.out.print("\nDigite o email do cliente: \n");
		email = in.nextLine();
		Cliente cliente = new Cliente(nome,cpf,email);
		cl.add(cliente);
	}
	
	public void novaConta(){
		int numero;
		String tipo;
		double saldo;
		Cliente cliente;
		
		System.out.print("\n\nDigite o numero da nova conta: ");
		numero = in.nextInt();
		System.out.print("\n'Conta Corrente' ou 'Poupança'? ");
		tipo = in.nextLine();
		System.out.print("\nQual o valor do saldo inicial? ");
		saldo = in.nextDouble();
		Conta contacor = new Conta(numero,tipo,saldo,cliente);
		cc.add(contacor);
	}

}[/code]

e

[code]
public class Conta {

private int numero;
private String tipo;
private double saldo;
private Cliente cliente;

public Conta(int num,String tp,double sd,Cliente cl){
	numero = num;
	tipo = tp;
	saldo = sd;
	cliente = cl;
}

public int getNumero() {
	return numero;
}

public void setNumero(int numero) {
	this.numero = numero;
}

public String getTipo() {
	return tipo;
}

public void setTipo(String tipo) {
	this.tipo = tipo;
}

public double getSaldo() {
	return saldo;
}

public void setSaldo(double saldo) {
	this.saldo = saldo;
}

public Cliente getCliente() {
	return cliente;
}

public void setCliente(Cliente cliente) {
	this.cliente = cliente;
}

}[/code]

Olá

pelo que deu dara nota na linha 71 voce esta passando uma referencia do Classe Cliente ainda nao instaciada.

voce deve instancia o cliente, antes de submeter o objeto.

tente dessa forma.

		public void novaConta(){
			int numero;
			String tipo;
			double saldo;

			Cliente cliente = new Cliente();
			
			System.out.print("\n\nDigite o numero da nova conta: ");
			numero = in.nextInt();
			System.out.print("\n'Conta Corrente' ou 'Poupança'? ");
			tipo = in.nextLine();
			System.out.print("\nQual o valor do saldo inicial? ");
			saldo = in.nextDouble();
			Conta contacor = new Conta(numero,tipo,saldo,cliente);
			cc.add(contacor);
		}

acho que é isso tente ai, ver se resolve.

At+

Jailes.

Boa noite Jailes,

Então, instanciei Cliente na linha 55, passando parâmetros recebidos via teclado.

Paulo,

o seguinte se observar que o cliente que submete na linha 71 e uma referencia do cliente da linha 63 que é local ao metodo novaConta();

ou seja o cliente da linha 55 a que voce se refere nao tem nada a ver na execucao do metodo novaConta();

verifique ai.

At+

Jailes

Fiz o que sugeriu, mas o eclipse acusa variável duplicada ou não declarada…

Paulo,

tente colocar o seu metodo dessa forma:

		public void novaConta(){
			int numero;
			String tipo;
			double saldo;

			String nome;
			String cpf;
			String email;
			
			System.out.print("\n\nDigite o cpf do Cliente: ");
			cpf = in.nextLine();
			System.out.print("\nDigite o nome do Cliente: ");
			nome = in.nextLine();
			System.out.print("\nDigite o email do cliente: \n");
			email = in.nextLine();
			
			Cliente cliente = new Cliente(nome,cpf,email);
			cl.add(cliente);
			
			System.out.print("\n\nDigite o numero da nova conta: ");
			numero = in.nextInt();
			System.out.print("\n'Conta Corrente' ou 'Poupança'? ");
			tipo = in.nextLine();
			System.out.print("\nQual o valor do saldo inicial? ");
			saldo = in.nextDouble();
			Conta contacor = new Conta(numero,tipo,saldo,cliente);
			cc.add(contacor);
		}

Tente ai.

At+

Jailes

Funcionou perfeitamente, o único problema é que dessa forma, tenho que cadastrar um cliente e uma conta sempre, não tendo como um cliente antigo abrir uma nova conta por exemplo.
Desculpe se eu estiver sendo chato com isso, mas é que não encontrei nenhuma situação parecida pela internet da vida.

Paulo,

sim ha como voce fazer isso.

basta que ao criar a nova conta voce passe um cliente valido.

como voce verificou estava dando erro, porque estava passando um cliente invalido (uma referencia da classe Cliente ainda nao instaciada)

um exemplo pratico em cima do seu codigo seria cria 10 contas para um mesmo cliente seria:

import java.util.Scanner;
import java.util.ArrayList;

public class BancoMain {

	private ArrayList<Cliente> cl;
	private ArrayList<Conta> cc;
	Scanner in;

	public BancoMain() {
		cl = new ArrayList<Cliente>();
		cc = new ArrayList<Conta>();
		in = new Scanner(System.in);
	}

	public static void main(String[] args) {

		int op;

		Scanner opcao = new Scanner(System.in);
		BancoMain b = new BancoMain();

		System.out.print("\n***** Banco RoubaBem iLtda *****");
		System.out.print("\n\nDigite a opcao desejada: ");
		System.out.print("\n1 - Cadastrar Cliente;");
		System.out.print("\n2 - Cadastrar nova Conta;");
		System.out.print("\n3 - Alterar dados de Cliente;");
		System.out.print("\n4 - Alterar dados da Conta;");
		System.out.print("\n5 - Excluir Cliente;");
		System.out.print("\n6 - Exluir Conta;");
		System.out.print("\n0 - Encerrar o Sistema;");
		op = opcao.nextInt();
		switch (op) {
		case 1:
			b.cadastraCliente();
			break;

		case 2:
			b.novaConta();
			break;
		}
	}

	public void cadastraCliente() {
		String nome;
		String cpf;
		String email;

		System.out.print("\n\nDigite o cpf do Cliente: ");
		cpf = in.nextLine();
		System.out.print("\nDigite o nome do Cliente: ");
		nome = in.nextLine();
		System.out.print("\nDigite o email do cliente: \n");
		email = in.nextLine();
		Cliente cliente = new Cliente(nome, cpf, email);
		cl.add(cliente);
	}

	public void novaConta() {
		int numero;
		String tipo;
		double saldo;

		String nome;
		String cpf;
		String email;

		System.out.print("\n\nDigite o cpf do Cliente: ");
		cpf = in.nextLine();
		System.out.print("\nDigite o nome do Cliente: ");
		nome = in.nextLine();
		System.out.print("\nDigite o email do cliente: \n");
		email = in.nextLine();

		Cliente cliente = new Cliente(nome, cpf, email);
		cl.add(cliente);

		System.out.print("\n\nDigite o numero da nova conta: ");
		numero = in.nextInt();
		System.out.print("\n'Conta Corrente' ou 'Poupança'? ");
		tipo = in.nextLine();
		System.out.print("\nQual o valor do saldo inicial? ");
		saldo = in.nextDouble();
		Conta contacor = new Conta(numero, tipo, saldo, cliente);
		cc.add(contacor);
		
		criaContaClienteAntigo();
		
	}

	public void criaContaClienteAntigo() {
		if (cl != null && cl.size() > 0) {
			Cliente cli = cl.get(0);
			novaConta(cli);
		}
	}

	public void novaConta(Cliente cliente) {
		int numero;
		String tipo;
		double saldo;

		System.out.print("\n\nDigite o numero da nova conta: ");
		numero = in.nextInt();
		System.out.print("\n'Conta Corrente' ou 'Poupança'? ");
		tipo = in.nextLine();
		System.out.print("\nQual o valor do saldo inicial? ");
		saldo = in.nextDouble();
		
		Conta contacor = new Conta(numero, tipo, saldo, cliente);
		cc.add(contacor);
		
		System.out.println("Conta Criada Cliente Existente");
	}

}

como ta para nota esta sendo criada uma nova conta para um cliente existente, que está adicionado na lista de cliente.

At+

Jailes