\u001f
é um caractere de controle, nem é imprimível e eu nem sei como produzir com o teclado (só via programação).
Enfim, não sei como vc conseguiu essa proeza, mas sugiro apagar essa linha toda e digitar tudo de novo na mão, sem copiar (talvez tenha vindo de algum Ctrl-C que vc fez de outro editor, sei lá).
De qualquer forma, mesmo se corrigir isso o código não vai funcionar, e tem várias coisas que não fazem sentido. Inclusive coisas básicas da sintaxe da linguagem, que já vou comentar mais abaixo.
Sem ironia, parece - pelo menos é a impressão que passa - que vc está tentando coisas aleatórias na esperança que “funcione”. E esse não é o melhor jeito de programar. Eu sugiro - de novo, sem ironia nenhuma - voltar alguns passos e começar desde o básico da linguagem: aqui tem vários tutoriais para quem está começando.
Dito isso, este trecho está errado:
public Cliente(String CPF, String nomeTitular, double saldoConta, double limiteConta) {
this.cpf = "CPF";
this.nomeTitular = "nomeTitular";
Isso porque vc ignora os parâmetros CPF
e nomeTitular
, e em vez disso vc atribui strings contendo os textos “CPF” e “nomeTitular”. Ou seja, não importa o que for passado ali, o CPF do cliente sempre será o texto “CPF”. O correto é usar os valores que foram informados:
public Cliente(String CPF, String nomeTitular, double saldoConta, double limiteConta) {
this.cpf = CPF; // sem as aspas
this.nomeTitular = nomeTitular; // sem as aspas
Aproveitando, sugiro usar as convenções de nomenclatura da linguagem (usando cpf
em vez de CPF
), além de abrir colchetes na mesma linha.
Outro ponto é que não sei se faz sentido o construtor já imprimir os dados. A função dele é inicializar o objeto, depois vc decide se vai imprimir ou não.
E sugiro deixar os campos privados, assim vc controla quem e quando eles podem ser modificados. Por exemplo, CPF e nome podem mudar? Já o saldo só muda se vc fizer saques e depósitos, então se o campo for privado vc controla o acesso aos mesmos:
public class Cliente {
// campos privados, para que não possam ser alterados por qualquer um
private String cpf;
private String nomeTitular;
private double saldoConta;
private double limiteConta;
public Cliente(String cpf, String nomeTitular, double saldoConta, double limiteConta) {
this.cpf = cpf;
this.nomeTitular = nomeTitular;
this.saldoConta = saldoConta;
this.limiteConta = limiteConta;
}
void imprime() {
System.out.println("CPF: " + this.cpf);
System.out.println("Nome do Titular : " + this.nomeTitular);
System.out.println("Saldo da Conta: " + this.saldoConta);
System.out.println("Limite da Conta: " + this.limiteConta);
}
}
Aí depois pode ter métodos que alteram o saldo (como um método para saque e outro para depósito). Sem o private
, vc poderia setar qualquer valor arbitrário, o que geralmente não faz sentido para o saldo de uma conta.
Em ProgramaConta
, não fez sentido declarar de novo o CPF, nome do titular, etc. E esse Cliente
“solto” também não faz sentido, aliás nem sequer compila. O que faz mais sentido é vc ter tudo no main
, algo assim:
public class ProgramaConta {
public static void main(String[] args) {
// cria um cliente e imprime
// repare que passo os dados diretamente (pra que criar variáveis à toa?)
Cliente cliente = new Cliente("12345678909", "Fulano de Tal", 100, 300);
cliente.imprime();
// cria outro cliente
Cliente outroCliente = new Cliente("11122233396", "Ciclano da Silva", 50000, 90000);
outroCliente.imprime();
}
}
E claro que dá para melhorar. O saldo e limite, por exemplo, são informações da conta, não do cliente. Afinal, um mesmo cliente pode ter várias contas (e cada conta terá seu próprio saldo e limite), etc.