Olá pessoas. Gostaria de saber se tem e como seria fazer uma instância feita pelo usuário.
Tive essa idéia quando fazia um exercício da faculdade e não sei se seria possível, mas estou fazendo assim:
Criando um loop com do-While onde o loop finaliza apenas quando digitado 7. A primeira opção é criar uma instancia da Classe ContaBancaria onde será inserido o nome do cliente e seu saldo.
Particulamente eu não gosto de criar um tamanho fixo de clientes ou algo similar e fiquei com isso na cabeça, mas sem saber se é possível.
Ai meu código para entenderem melhor o que desejo dizer:
[code]public class Principal {
public static void main(String[] args){
int selectMenu;
String nc;
float sl;
Scanner scan = new Scanner(System.in);
do{
System.out.println("Cod | Função. ");
System.out.println("---------------------------");
System.out.println(" 1 | Inserir novo Cliente.");
System.out.println(" 2 | Listar Cliente. ");
System.out.println(" 3 | Debitar Conta. ");
System.out.println(" 4 | Creditar Conta. ");
System.out.println(" 5 | Atribuir novo Saldo. ");
System.out.println(" 6 | Alterar nome cliente.");
System.out.println(" 7 | Finalizar Sistema. ");
System.out.print("Insira o valor da opção desejada:");
selectMenu = scan.nextInt();
switch(selectMenu){
case 1:
ContaBancaria x = new ContaBancaria();
break;
case 2:
break;
case 3:
break;
case 4:
break;
case 5:
break;
case 6:
break;
case 7:
System.out.println("O Software será finalizado!");
break;
default:
System.out.println("Valor inserido não corresponde a algum proposto.");
break;
}
}while(selectMenu != 7);
}
programação dinamica em Java é utilizado atraves de Reflexão (Java Reflection API)
Mas acho que não é isso que vc precisa não.
O que voce quer, é que quando um usuario digite alguma opcao e atraves dessa opcao algum objeto seja instanciado? Se sim… isso é uma instanciação comum… que no seu caso, daria atraves de uma condição (opção que o usuario digitou). Como vc fez no trecho abaixo:
case 1:
ContaBancaria x = new ContaBancaria();
break;
Bom galera, tipo assim. Quando se vai criar um cliente, por exemplo, tem que fazer uma instancia para cada cliente. Minha dúvida é fazer essas instâncias sem um número determinado e sem precisar fazer na código. Tipo, o programa já como um executável e quando é iniciado se pode fazer diversas instancias sem mexer no código fonte, apenas no console ou interface gráfica do programa.
O que desejo é instanciar quantas vezes for preciso sem que se mexa no código fonte e os atributos de cada Instância tem que ser diferente. Pensei que quando fosse cadastrar um novo cliente o usuário iria digitar uma String que seria o atributo da instancia exemplo:
Inserir novo cliente: Linus
Ai no código ele iria pegar o nome Linus e iria fazer a instancia:
Amigão, acho que você deve estar fazendo confusão.
Deixa eu explicar uma coisa, pode ser que você já saiba mas, se souber, será só uma revisão.
Quando se faz:
ContaBancaria joao = new ContaBancaria();
ContaBancaria joao -> significa que você está criando uma váriavel de referência do tipo ContaBancaria, e essa variavel sera acessivel pela palavra chave joao.
new ContaBancaria() -> significa que você está criando uma instancia do tipo ContaBancaria.
= ->indica que você está usando a váriável da esquerda para apontar para a instancia da direita.
Logo joao não tem uma relação forte com o objeto instaciado, tanto que você pode apontar a variavel joao para outro objeto.
Se você quer que as instancias do tipo ContaBancaria possuam um nome, isso deve ser feito criando um atributo de instancia na declaração da classe:
class ContaBancaria {
private String nome;
public ContaBancaria() {
}
public ContaBancaria(String nome) {
this.nome = nome;
}
public String getNome() {
return this.nome;
}
public void setNome(String nome) {
this.nome = nome;
}
}
Olha só isso:
ContaBancaria joao = new ContaBancaria();
ContaBancaria maria = new ContaBancaria();
System.out.println("joao = " + joao);
System.out.println("maria = " + maria);
ContaBancaria temp = joao; //a instancia referenciada por joao passa a ser referenciada tambem por temp.
joao = maria; // joao passa a referenciar a mesma instancia que maria
maria = temp; // maria passa a referenciar a instancia que era referenciada por joao na primeira linha
System.out.println("joao = " + joao);
System.out.println("maria = " + maria);
No código acima, usando uma variável a mais eu consegui fazer com que joao e maria trocassem suas referencias.
Se você executar vai ver que os valores são trocados entre as variaveis.
desculpe se chovi no molhado.
mas espero que tenha ajudado.
cara nao eh pq o seu objeto chama x que ele sempre sera o mesmo objeto…
cada vez que o codigo
ContaCorrente x = new ContaCorrente()
for executado ele gera um objeto diferente…sera uma instancia diferente…
exemplo: ContaCorrente tera um numero certo? E de acordo com o negocio da conta o numero nunca podera ser igual… entao para cada conta corrente que voce abrir cada uma tera um numero diferente… e entao vc consegue diferenciar uma conta da outra… Mas mesmo que vc instanciasse 10 vezes o objeto X e todos com os mesmos valores nos atributos mesmo assim ainda seriam 10 objetos diferentes…pq na memoria a JVM cria um endereco d memoria para cada objeto e cada um tem um nome na memoria…isso quem gerencia eh a JVM…
o problema que ao criar o segundo objeto x vc perde a referencia do primeiro… afinal todos chamam x… para isso ou vc cria uma lista e vai armazenando suas conta correntes na lista ou salva seu objeto no banco de dados com id, numero da conta, essas coisas.e qdo precisa vc recupera de acordo com id, numero da conta…
Bem galera, obrigado pela ajuda, mas não estou conseguindo fazer o que quero. Talvez para o que eu quero a melhor opção seja usar um DB mesmo, contudo nem sei mexer em um e não foi isso que o professor pediu. Terei que me contentar com um número determinado de clientes mesmo. O Java não tá aceitando Instancia dentro de um Switch.
Caso você queira inserir mais de dois clientes você poderia criar um HashMap<String, ContaBancaria>, aí na key vc guardaria o nome do cliente, e no value a ContaBancaria em si. Aí vc localizaria o objeto da conta pelo nome do cara.
String nomeCliente = scan.next(); // receber do usuário o nome do cliente
HashMap<nomeCliente, ContaBancaria>
Com isso o nome que o usuário digitar será a referencia a Instancia, tipo, se o usuário digitar Pedro, será o mesmo que ter digitado ContaBancaria pedro = new ContaBancaria(); ?