Ao cadastrar cliente, programa fecha

9 respostas
java
H

Olá a todos.

Nesta linha de código, apos realizar o cadastro do cliente, o programa a baixo fecha.

Desde ja agradeço a atenção de todos!

//===================================================================
// isso é o main //

public class BancoPrincipal {

public static void main(String[] args) {
	
	Banco myBank = new Banco();
	myBank.informationBanco();
	myBank.menuBanco();
	
}

}
//===================================================================
// isso é uma classe //

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

public class Banco {

Scanner entrada = new Scanner(System.in);

private String nomeBanco = "My Bank";
private String enderecoBanco = "Endereço: Rua x\nNumero: 123";

ArrayList listaClientes;
ArrayList listaContas;

public Banco() {
	listaClientes = new ArrayList();
	listaContas = new ArrayList();
}
public void adicionaConta(Conta cont) {
	listaContas.add(cont);
}
public void adicionaCliente(Cliente client) {
	listaClientes.add(client);
}
public void informationBanco() {
	System.out.println("\t" + nomeBanco + "\n\n" + enderecoBanco + "\n");
}

//MENU
private int opcaoMenuBanco;
public void menuBanco() {
	
	System.out.println("Escolha uma das opções\n");
	do {
		System.out.println("1-Listagem de Contas\n2-Listagem de CLientes\n3-Cadastro de Novo Cliente\n0-Sair");
		opcaoMenuBanco = entrada.nextInt();
		if(opcaoMenuBanco < 0 || opcaoMenuBanco > 3) {
			System.out.println("\tOpção Invalida!!\n");
		}
		else {
			if(opcaoMenuBanco == 1) {
				if(listaContas.size() <= 0) {
					System.out.println("\tAinda Não Tem Contas Cadastradas!!\n");
				}
				else {
					//if(listaContas.size() >= 1) {
						System.out.println("\tLista de Contas\n");
						for(int i = 0; i <= listaContas.size(); i++) {
							Conta cont = (Conta) listaContas.get(i);
			                cont.informationConta();
						}
					//}
				}
			}
			if(opcaoMenuBanco == 2) {
				if(listaClientes.size() <=0) {
					System.out.println("\tAinda Não Tem Clientes Cadastrados!!\n");
				}
				else {
					//if(listaClientes.size() >= 1) {
					System.out.println("\tLista de Clientes\n");
					for(int i = 0; i <= listaClientes.size(); i++) {
						Cliente clie = (Cliente) listaClientes.get(i);
		                clie.informationCliente();
					}
				//}
				}
			}
			if(opcaoMenuBanco == 3) {
				Cliente client = new Cliente();
				client.novoCliente();
				System.out.println("O Cliente " + client.getNomeCliente() + " foi cadastrado com Sucesso!\n");
			}
		}
		
	}while(opcaoMenuBanco != 0 && entrada.hasNext());
	entrada.close();
}

public String getNomeBanco() {
	return nomeBanco;
}
public void setNomeBanco(String nomeBanco) {
	this.nomeBanco = nomeBanco;
}
public String getEnderecoBanco() {
	return enderecoBanco;
}
public void setEnderecoBanco(String enderecoBanco) {
	this.enderecoBanco = enderecoBanco;
}

}

//===================================================================
// isso é uma classe //

import java.util.Scanner;

public class Cliente {

Scanner entrada = new Scanner(System.in);

private String nomeCliente = "";
private int idadeCliente;
private String generoCliente;

public void informationCliente() {
	System.out.println("\tInformações do Cliente\n\nNome: " + nomeCliente + "\nIdade: " + idadeCliente + "\nGenero: " + generoCliente);
}

public void novoCliente() {
	
	System.out.println("\tCadastro de Cliente\n\nNome: ");
	nomeCliente = entrada.next();
	System.out.println("Idade: ");
	idadeCliente = entrada.nextInt();
	System.out.println("Genero: ");
	generoCliente = entrada.next();
	entrada.close();
}

public String getNomeCliente() {
	return nomeCliente;
}

public void setNomeCliente(String nomeCliente) {
	this.nomeCliente = nomeCliente;
}

public int getIdadeCliente() {
	return idadeCliente;
}

public void setIdadeCliente(int idadeCliente) {
	this.idadeCliente = idadeCliente;
}

public String getGeneroCliente() {
	return generoCliente;
}

public void setGeneroCliente(String generoCliente) {
	this.generoCliente = generoCliente;
}

}

//===================================================================
// isso é uma classe //

public class Conta {

private double saldo = 0;
private Cliente cliente;

public Conta() {
	cliente = null;
}
public void informationConta() {
	if(cliente == null) {
		System.out.println("Sem Clientes!");
	}
	else {
		System.out.println("\tInformação Conta\n\nCliente: " + cliente.getNomeCliente());
	}
	System.out.println("Saldo: " + saldo);
}
public void deposito(double valor) {
	this.saldo = this.saldo + valor;
}
public void levantamento(double valor) {
	this.saldo = this.saldo - valor;
}

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;
}

}

9 Respostas

rodriguesabner

qual erro dá?

H

não da erro, após cadastrar, o programa fecha, mas tem que continuar rodando.

I

Aparentemente não tem nenhum erro, o que leva a verificar a sua condição de parada do laço:

while(opcaoMenuBanco != 0 && entrada.hasNext())

Creio que o método hasNext() não seja o mais adequado, pois ele vai verificar se há no scanner um novo token. Como o scanner é ‘carregado’ antes, esse método vai bloquear o while à espera de um novo token, como informa a documentação (Doc Oracle - hasNext()).

hasNext() - Retorna true se este scanner tiver outro token em sua entrada. Esse método pode bloquear enquanto aguarda a entrada da varredura. O scanner não avança além de nenhuma entrada.

Comprovando:

image

Veja que o sistema ficou esperando por uma nova entrada (no teste do while). Logo, quando digitei uma entrada qualquer (no caso o número 7), o sistema prosseguiu.

H

Exato, escolhendo as opções 1, 2 ou acima de 3, o sistema continua perguntando o que fazer a seguir, mas quando selecionado a opção 3, apos preencher os dados do cliente, o programa fecha.

Alterei de do/while para apenas while, mas continua. (não sei se era isso que me indicou a fazer.)

veja:

I

Tomei a liberdade de fazer algumas alterações:

1 - Banco

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

public class Banco {
	private String nomeBanco = "My Bank";
	private String enderecoBanco = "Endereço: Rua x\nNumero: 123";
	
	List<Cliente> listaClientes;
	List<Conta> listaContas;

	public Banco(){
		listaClientes = new ArrayList<>();
		listaContas = new ArrayList<>();
	}
	
	public void adicionaConta(Conta cont) {
		listaContas.add(cont);
	}
	
	public void adicionaCliente(Cliente client) {
		listaClientes.add(client);
	}
	
	public void informationBanco() {
		System.out.println("\t" + nomeBanco + "\n\n" + enderecoBanco + "\n");
	}

	/*
	* Menu
	*/
	public void menuBanco(){
		Scanner entrada = new Scanner(System.in);
		
		int opcaoMenuBanco;
		System.out.println("Escolha uma das opções\n");
	
		do{
			System.out.println(
				"01-Listagem de Contas\n" +
				"02-Listagem de CLientes\n" +
				"03-Cadastro de Novo Cliente\n" +
				"99-Sair"
			);
			
			System.out.print("Opção escolhida: ");
			opcaoMenuBanco = entrada.nextInt();
			
			if(opcaoMenuBanco < 0 || opcaoMenuBanco > 3) {
				System.out.println("\tOpção Invalida!!\n");
				entrada.close();
			}
			else {
				if(opcaoMenuBanco == 1){
					
					if(listaContas.size() <= 0){
						System.out.println("\tAinda Não Tem Contas Cadastradas!!\n");
						
					}else{
						System.out.println("\tLista de Contas\n");
						for(int i = 0; i <= listaContas.size(); i++) {
							Conta cont = (Conta) listaContas.get(i);
							cont.informationConta();
						}
					}
				}
				if(opcaoMenuBanco == 2){
					if(listaClientes.size() <= 0) {
						System.out.println("\tAinda Não Tem Clientes Cadastrados!!\n");
						
					}else {
						System.out.println("\tLista de Clientes\n");
						for(int i = 0; i < listaClientes.size(); i++) {
							Cliente cliente = listaClientes.get(i);
							cliente.informationCliente();
						}
					}
				}
				
				if(opcaoMenuBanco == 3) {
					Cliente cliente = new Cliente();
					cliente.novoCliente();
					
					adicionaCliente(cliente);
					
					System.out.println(
						"O Cliente " + cliente.getNomeCliente() + 
						" foi cadastrado com Sucesso!\n"
					);
				}
			}
			
		}while(opcaoMenuBanco != 99);
	}

	public String getNomeBanco(){
		return nomeBanco;
	}
	
	public void setNomeBanco(String nomeBanco){
		this.nomeBanco = nomeBanco;
	}
	
	public String getEnderecoBanco(){
		return enderecoBanco;
	}
	
	public void setEnderecoBanco(String enderecoBanco){
		this.enderecoBanco = enderecoBanco;
	}
}

2 - Conta:

public class Conta {
	private double saldo = 0;
	private Cliente cliente;

	public Conta(){
		cliente = null;
	}
	
	public void informationConta() {
		if(cliente == null) {
			System.out.println("Sem Clientes!");
		}
		else {
			System.out.println("\tInformação Conta\n\nCliente: " + cliente.getNomeCliente());
		}
		System.out.println("Saldo: " + saldo);
	}
	
	public void deposito(double valor) {
		this.saldo = this.saldo + valor;
	}
	
	public void levantamento(double valor) {
		this.saldo = this.saldo - valor;
	}

	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;
	}
}

3 - Cliente:

import java.util.Scanner;

public class Cliente {
	private String nomeCliente = "";
	private int idadeCliente;
	private String generoCliente;
	
	public void informationCliente() {
		System.out.println(
			"\tInformações do Cliente\n" + 
			"Nome: " + nomeCliente + 
			"\nIdade: " + idadeCliente + 
			"\nGenero: " + generoCliente + "\n\n");
	}

	public void novoCliente(){
		Scanner entrada = new Scanner(System.in);
		
		System.out.println("\n\tCadastro de Cliente");
		System.out.print("Nome: ");
		nomeCliente = entrada.next();
		
		System.out.print("Idade: ");
		idadeCliente = entrada.nextInt();
		
		System.out.print("Genero: ");
		generoCliente = entrada.next();
	}

	public String getNomeCliente() {
		return nomeCliente;
	}

	public void setNomeCliente(String nomeCliente) {
		this.nomeCliente = nomeCliente;
	}

	public int getIdadeCliente() {
		return idadeCliente;
	}

	public void setIdadeCliente(int idadeCliente) {
		this.idadeCliente = idadeCliente;
	}

	public String getGeneroCliente() {
		return generoCliente;
	}

	public void setGeneroCliente(String generoCliente) {
		this.generoCliente = generoCliente;
	}
}

4 - BancoPrincipal:

public class BancoPrincipal {
	public static void main(String[] args) {
		
		Banco myBank = new Banco();
		myBank.informationBanco();
		myBank.menuBanco();
	}
}

Rodando:

1

Podemos fazer uma versão Web desse programa para ser acessado em todo lugar?

1

Ele é executado em uma única Thread?

1

É possível executar em uma thread separado?

H

Adicionei o List listaClientes; e List listaContas; entre outros detalhes que estavam errado e faltando em meu código.
Porem pra mim continua a fechar depois de realizar um cadastro, acredito agora que seja meu Eclipse, vou fazer novamente o código passo a passo.

Agradeço a atenção de todos!

Criado 12 de outubro de 2019
Ultima resposta 14 de out. de 2019
Respostas 9
Participantes 4