Ajuda com Lógica em Java

Olá pessoal, estou aqui porque não consegui resolver um problema mais voltado pra “lógica” e que estou quebrando a cabeça.

O código é bem simples. Estou fazendo por parte. Falta implementar a classe “Cliente” e a classe “Conta”.

Aqui está o código simples:

public class ProgramaConta {
    private String cpf;
    private String nomeTitular;
    private double saldoConta;
    private double limiteConta;

    public static void main(String[] args) {
        ProgramaConta(String CPF,String nomeTitular,double saldoConta,double limiteConta) {
            this.cpf = CPF;
            this.nomeTitular = nomeTitular;
            this.saldoConta = saldoConta;
            this.limiteConta = limiteConta;
            //Cliente.imprime();
        }
    }
}	

Já fiz muitas possibilidades e lógicas, mas não obtive sucesso.

Os erros para o código acima são esses:

Se alguém tiver uma solução fico agradecido!

Obrigado!

Vc declarou o construtor dentro do método main, isso não faz o menor sentido. O certo seria algo como:

public class ProgramaConta {
    // campos
    private String cpf;
    etc..

    // construtor
    public ProgramaConta(String CPF,String nomeTitular,double saldoConta,double limiteConta) {
        this.cpf = CPF;
        etc...
    }

    // main
    public static void main(String[] args) {
        etc...
    }
}
1 curtida

Muito obrigado pela ajuda @hugokotsubo !

Mas eu tentei de tudo pra fazer funcionar. O máximo que consegui segue aqui neste post.

Cliente:

public class Cliente
{
	
   String cpf;
   String nomeTitular;
   double saldoConta;
   double limiteConta;
   
	public Cliente(String CPF, String nomeTitular,double saldoConta,double limiteConta)
	 {
        this.cpf = "CPF";
		this.nomeTitular = "nomeTitular";
	    this.saldoConta = saldoConta;
		this.limiteConta = limiteConta;
		this.imprime();
	 }
	 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 classe “Cliente” esta compilando, mas não tem a função “main”:

ProgramaConta:

public class ProgramaConta
{	
      private String cpf = "cpf";
      private String nomeTitular = "titular" ;
      private double saldoConta= 100.0;
      private double limiteConta= 300.0;
	  
	  Cliente cliente = new Cliente(cpf,nomeTitular,saldoConta,limiteConta)
	  {
	     this.cpf = cpf;
            this.nomeTitular = nomeTitular;
	     this.saldoConta = saldoConta;
	     this.limiteConta = limiteConta;	 
	  }
    
    public static void main(String[] args)
    {
		cliente.imprime();
	}
}
  

Gera um erro do tipo “\u001f” no arquivo da classe principal que tem o main(). Pesquisei na internet mas tem não consegui resolver assim mesmo :

Qualquer ajuda é bem vinda. Estou quebrando a cabeça mas não está fácil. O máximo que cheguei até agora é dar 1 erro e o erro ser esse “\u001f” de algum tipo de configuração.

Obrigado!

Editando -------------------------------------

Eu uso o Notepad++

Obrigado!

Boa noite, tudo joia?

O melhor seria separar o seu código. Geralmente, não se coloca o main dentro de uma outra classe da forma como está fazendo.

Tente separa criando uma classe Aplicação e colocando o metodo public staitc void main.... Essa classe será sua aplicação e toda a lógica vc acumula dentro do metodo main nessa classe. Isso melhora a organização do seu código.

Em relação ao seu erro é pq dentro da main vc não declarou o cliente, note que na sua classe ProgramConta vc cria o cliente antes de chamar o metodo main, crie o cliente dentro do metodo main e somente após isso chame o cliente.imprime.

A organização do seu código é muito importante, quando vc segrega o metodo main para uma classe especifica erros dessa forma fica fácil de perceber. Ao separar vc teria um ProgamaConta que teria um atributo do tipo cliente e na hora de chamar vc teria algo como.

public class Cliente {
  String cpf;
   String nomeTitular;
   double saldoConta;
   double limiteConta;
   
	public Cliente(String CPF, String nomeTitular,double saldoConta,double limiteConta)
	 {
        this.cpf = "CPF";
		this.nomeTitular = "nomeTitular";
	    this.saldoConta = saldoConta;
		this.limiteConta = limiteConta;
		this.imprime();
	 }
	 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);
     }   
}

public class ProgramaConta
{	
      private String cpf = "cpf";
      private String nomeTitular = "titular" ;
      private double saldoConta= 100.0;
      private double limiteConta= 300.0;
      Cliente cliente;
}

public class Aplicacao {
    public static void main (string[] args) {
    ProgamaConta programaConta = new ProgamaConta();
   progamaConta.setCliente(new Cliente(...))
   programaConte.getCliente().imprime();
   }
}

Note que cada vez que eu criei uma classe é um arquivo diferente!!!

Fico a disposição.

\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.

Olá @Insurgent3 tudo bem? notei os mesmos erros que nosso amigo @hugokotsubo notou, você está criando um construtor adicionando e setando informações do tipo String onde você deveria referenciar os atributos da classe para serem instanciados no metodo main,peço que leia e aceite com carinho minhas palavras e volte atrás e reveja as bases de lógica e algoritmo assim como nosso amigo falou acima, pois seu código apresenta erros tanto de lógica como tambem de sintaxe, acredito que se o senhor assistar a playlist do youtube do Pai Gustavo Guanabara que lhe ajudará a estruturar sua lógia e algoritmo, aqui o link https://youtu.be/8mei6uVttho?si=1MNc82CWnhkPQOLC lhe encaminhará para o canal do youtube, e logo após terminar o curso de lógica e algoritmo o senhor pode comprar um curso de Java na Udemy do professor Nélio Alves que deve custar de R$25 a R$30 reais é ótimo para iniciantes , mais caso você encontre playlist de curso de java completo no youtube é uma opção economica consideavel.
Aprenda de forma progressiva e constante para evitar atrasos e erros desnecessários em sua caminhada, e lembre-se que desenvolvimento de software é uma maratona e não uma corrida de cem metros.
Espero ter ajudado, abraços.