Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Ajuda em uma atividade

Tudo bem caros colegas? Preciso de uma ajuda em um erro que não consigo identificar o problema. Na condição em que eu decido realizar um depósito, retorna um erro relacionado a: String index out of range: 0. Porém, não consigo identificar a solução. Agradeço demais qualquer ideia. (resolvi colocar em prática, tudo o que vi até hoje nas aulas)

Aplicação:

package application;

import java.util.Locale;
import java.util.Scanner;

import entities.Clientes;
import entities.Conta;

public class Program {

    public static void main(String[] args) {
        Locale.setDefault(Locale.US);
        Scanner sc = new Scanner(System.in);
        Conta novaConta = new Conta();
        novaConta.cliente = new Clientes();

        System.out.println("ByteBank Alura.");
        System.out.println("Insira os dados solicitados.");
        System.out.print("Nome: ");
        novaConta.cliente.nome = sc.nextLine();
        System.out.print("CPF: ");
        novaConta.cliente.cpf = sc.nextLine();
        System.out.print("Profissão: ");
        novaConta.cliente.profissao = sc.nextLine();

        System.out.printf("Nome: " + novaConta.cliente.nome + "; CPF: " + novaConta.cliente.cpf + "; Profissão: " + novaConta.cliente.profissao + "; Saldo PROMOCIONAL: R$" + String.format("%.2f", novaConta.saldo));
        System.out.println();
        System.out.print("Gostaria de realizar um deposito? (s/n) ");
        char escolhaDeposito = sc.nextLine().charAt(0);
        if(escolhaDeposito == 's' || escolhaDeposito == 'S' ) {
            System.out.print("Insira o valor do deposito: ");
            novaConta.deposito(sc.nextDouble());
            System.out.printf("Nome: " + novaConta.cliente.nome +  "; Saldo atual: R$" + String.format("%.2f", novaConta.saldo));
        }

        System.out.println();
        System.out.print("Gostaria de realizar um saque? (s/n) ");
        char escolhaSaque = sc.nextLine().charAt(0);
        if(escolhaSaque == 's' || escolhaSaque == 'S' ) {
            System.out.print("Insira o valor do saque: ");
            novaConta.saque(sc.nextDouble());
            System.out.printf("Nome: " + novaConta.cliente.nome +  "; Saldo atual: R$" + String.format("%.2f", novaConta.saldo));
        }else {
            System.out.println("O ByteBank Alura, agradece a preferencia.");
        }

        sc.close();
    }

}

Classe Clientes

package entities;

public class Clientes {

    public String nome;
    public String cpf;
    public String profissao;
}

Classe Conta

package entities;

public class Conta {

    public double saldo = 100;
    public int agencia;
    public int numero;
    public Clientes cliente = new Clientes();

    public void deposito(double valor) {
        this.saldo += valor;
    }

    public void saque(double valor) {
        if(this.saldo >= valor) {
            this.saldo -= valor;
        }else if(this.saldo < valor){
            this.saldo -= valor;
            System.out.println("Bem vindo ao cheque especial.");
        }

    }
}
2 respostas
solução!

Olá, bom dia! O problema está na classe Program, essa forma de verificar se o usuário quer depositar ou sacar dinheiro não é a mais adequada. Uma forma de resolver o código da classe Program é assim:

public class Program {
    public static void main(String[] args) {
        Locale.setDefault(Locale.US);
        Scanner sc = new Scanner(System.in);
        Conta novaConta = new Conta();
        novaConta.cliente = new Clientes();

        System.out.println("ByteBank Alura.");
        System.out.println("Insira os dados solicitados.");
        System.out.print("Nome: ");
        novaConta.cliente.nome = sc.nextLine();
        System.out.print("CPF: ");
        novaConta.cliente.cpf = sc.nextLine();
        System.out.print("Profissão: ");
        novaConta.cliente.profissao = sc.nextLine();

        System.out.printf("Nome: " + novaConta.cliente.nome + "; CPF: " + novaConta.cliente.cpf + "; Profissão: " + novaConta.cliente.profissao + "; Saldo PROMOCIONAL: R$" + String.format("%.2f", novaConta.saldo));
        System.out.println();
        System.out.print("Gostaria de realizar um deposito? (s/n) ");
        boolean escolhaDeposito = sc.nextLine().toLowerCase().matches("s"); // Dessa forma fica mais facil de obter a resposta e ja verificar se o usuario quer depositar, ja que a entrada do scanner e tratada como String
        if(escolhaDeposito) {
            System.out.print("Insira o valor do deposito: ");
            novaConta.deposito(sc.nextDouble());
            System.out.printf("Nome: " + novaConta.cliente.nome +  "; Saldo atual: R$" + String.format("%.2f", novaConta.saldo));
        }

        System.out.println();
        System.out.print("Gostaria de realizar um saque? (s/n) ");
        sc.nextLine(); // Essa linha serve para fazer o scanner esperar o usuario digitar, sem ela a execucao pula direto para o else 
        boolean escolhaSaque = sc.nextLine().toLowerCase().matches("s");
        if(escolhaSaque) {
            System.out.print("Insira o valor do saque: ");
            novaConta.saque(sc.nextDouble());
            System.out.printf("Nome: " + novaConta.cliente.nome +  "; Saldo atual: R$" + String.format("%.2f", novaConta.saldo));
        }else {
            System.out.println("O ByteBank Alura, agradece a preferencia.");
        }

        sc.close();
    }
}

Espero ter ajudado!

Breno, ajudou demais!!!! Muito obrigado pelo apoio!!!