Black November

ATÉ 50% OFF

TÁ ACABANDO!

0 dias

0 horas

0 min

0 seg

3
respostas

[Projeto] dúvida de repetição de frase

Olá! tenho uma dúvida...
executando este código, a seguinte frase sempre aparece se eu selecionar as opções 1,2 e 3 (a frase: "opção inválida, tente novamente")
e emendando a dúvida, queria saber como faz para que o projeto não faça a conta quando o valor de transferência é maior do que o saldo atual, pois nesse projeto, se eu colocar um valor maior, o saldo final fica negativo.

import java.util.Scanner;

//TIP To Run code, press or
// click the icon in the gutter.
public class Main {
public static void main(String[] args) {
String nome = "mohamad";
String tipoConta = "corrente";
double saldoAtual = 3000;
int opcao = 0;
String menu = """
Operações
1- consultar saldo
2- Receber valores
3- transferir valores
4- sair
Digite a opção desejada
""";

    System.out.println("************************");
    System.out.println("seu nome é: "+ nome);
    System.out.println("o tipo da conta é: "+ tipoConta);
    System.out.println("o seu saldo atual é de: "+saldoAtual);
    System.out.println("************************");

    Scanner ler = new Scanner(System.in);


    while (opcao != 4){
        System.out.println(menu);
        opcao = ler.nextInt();

        if (opcao == 1){
            System.out.println("o saldo atual é de: "+saldoAtual);
        }
        else if (opcao == 2){
            System.out.println("informe o valor que deseja receber");
            int valor = ler.nextInt();
            saldoAtual = saldoAtual + valor;
            if (valor < 0){
                System.out.println("tem que ter valor acima de 0");
            }else {
                System.out.println("o saldo atual pós procedimento: "+saldoAtual);
            }
        }
        else if (opcao == 3){
            System.out.println("informe o valor que deseja transferir");
            int valor = ler.nextInt();
            saldoAtual = saldoAtual - valor;
            if (valor < 0 && valor > saldoAtual){
                System.out.println("não pode fazer essa transação");
            }else  {
                System.out.println("o saldo atual pós procedimento: "+saldoAtual);
            }
        }
        if (opcao == 4){
            System.out.println("finalizando");
        }
        else {
            System.out.println("opção inválida, tente novamente");
        }

    }

}

}

Matricule-se agora e aproveite até 50% OFF

O maior desconto do ano para você evoluir com a maior escola de tecnologia

QUERO APROVEITAR
3 respostas

Olá, Mohamad!
Tudo bem?
1 - Por que aparece sempre “opção inválida”?
O problema está neste bloco:

if (opcao == 4){
    System.out.println("finalizando");
}
else {
    System.out.println("opção inválida, tente novamente");
}

Isso significa que qualquer opção diferente de 4 vai cair no else, inclusive 1, 2 e 3. A solução é colocar o else só quando nenhuma das opções for válida.

2 - Como impedir que o saldo fique negativo?
Hoje você faz:

saldoAtual = saldoAtual - valor;

antes de validar se pode. E sua validação está errada:

if (valor < 0 && valor > saldoAtual){

Essa condição nunca será verdadeira, porque um número não pode ser menor que zero e maior que saldo ao mesmo tempo.
O correto é validar assim:
valor não pode ser negativo → valor < 0
valor não pode ser maior que o saldo → valor > saldoAtual
Com || (ou), não &&.

Um exemplo de código ajustado

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {

        String nome = "mohamad";
        String tipoConta = "corrente";
        double saldoAtual = 3000;
        int opcao = 0;

        String menu = """
        Operações
        1- consultar saldo
        2- Receber valores
        3- transferir valores
        4- sair
        Digite a opção desejada
        """;

        System.out.println("************************");
        System.out.println("seu nome é: " + nome);
        System.out.println("o tipo da conta é: " + tipoConta);
        System.out.println("o seu saldo atual é de: " + saldoAtual);
        System.out.println("************************");

        Scanner ler = new Scanner(System.in);

        while (opcao != 4) {
            System.out.println(menu);
            opcao = ler.nextInt();

            if (opcao == 1) {
                System.out.println("o saldo atual é de: " + saldoAtual);
            }

            else if (opcao == 2) {
                System.out.println("Informe o valor que deseja receber:");
                double valor = ler.nextDouble();

                if (valor < 0) {
                    System.out.println("O valor não pode ser negativo.");
                } else {
                    saldoAtual += valor;
                    System.out.println("Saldo após depósito: " + saldoAtual);
                }
            }

            else if (opcao == 3) {
                System.out.println("Informe o valor que deseja transferir:");
                double valor = ler.nextDouble();

                if (valor < 0) {
                    System.out.println("O valor não pode ser negativo.");
                }
                else if (valor > saldoAtual) {
                    System.out.println("Saldo insuficiente! Transferência cancelada.");
                }
                else {
                    saldoAtual -= valor;
                    System.out.println("Saldo após transferência: " + saldoAtual);
                }
            }

            else if (opcao == 4) {
                System.out.println("Finalizando...");
            }

            else {
                System.out.println("Opção inválida, tente novamente.");
            }
        }
    }
}

Bons estudos!

Olá Mohamad.
Tudo bem?
Vamos resolver seus dois problemas separadamente e depois deixo o código corrigido no final.
O erro está nesta parte:

if (opcao == 4){
    System.out.println("finalizando");
}
else {
    System.out.println("opção inválida, tente novamente");
}

Esse else está ligado apenas ao if (opcao == 4).
Ou seja: toda vez que a opção não for 4, ele imprime “opção inválida”, mesmo quando a opção é 1, 2 ou 3.
Como corrigir?
Transforme esse bloco final em um else if dentro da cadeia principal, assim:

else if (opcao == 4){
    System.out.println("finalizando");
} 
else {
    System.out.println("opção inválida, tente novamente");
}

Dentro da transferência você faz isso:

saldoAtual = saldoAtual - valor;
if (valor < 0 && valor > saldoAtual){

Dois problemas:
Erro 1 — Você subtrai o valor antes de verificar
Isso faz o saldo ficar negativo antes mesmo da validação.
Erro 2 — A condição valor < 0 && valor > saldoAtual nunca será verdadeira
Um número não pode ser menor que zero e ao mesmo tempo maior que o saldo.
A condição correta deve ser OR (||):

  • valor não pode ser negativo
  • valor não pode ser maior que o saldo
    Verifique antes de subtrair:
if (valor < 0 || valor > saldoAtual) {
    System.out.println("não pode fazer essa transação");
} else {
    saldoAtual -= valor;
    System.out.println("o saldo atual pós procedimento: " + saldoAtual);
}

CÓDIGO CORRIGIDO
Aqui está o seu programa funcionando corretamente:

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        String nome = "mohamad";
        String tipoConta = "corrente";
        double saldoAtual = 3000;
        int opcao = 0;

        String menu = """
        Operações
        1- consultar saldo
        2- Receber valores
        3- transferir valores
        4- sair
        Digite a opção desejada
        """;

        System.out.println("************************");
        System.out.println("seu nome é: " + nome);
        System.out.println("o tipo da conta é: " + tipoConta);
        System.out.println("o seu saldo atual é de: " + saldoAtual);
        System.out.println("************************");

        Scanner ler = new Scanner(System.in);

        while (opcao != 4) {
            System.out.println(menu);
            opcao = ler.nextInt();

            if (opcao == 1) {
                System.out.println("o saldo atual é de: " + saldoAtual);
            }
            else if (opcao == 2) {
                System.out.println("informe o valor que deseja receber");
                int valor = ler.nextInt();

                if (valor <= 0) {
                    System.out.println("o valor deve ser maior que zero");
                } else {
                    saldoAtual += valor;
                    System.out.println("o saldo atual pós procedimento: " + saldoAtual);
                }
            }
            else if (opcao == 3) {
                System.out.println("informe o valor que deseja transferir");
                int valor = ler.nextInt();

                if (valor <= 0 || valor > saldoAtual) {
                    System.out.println("não pode fazer essa transação");
                } else {
                    saldoAtual -= valor;
                    System.out.println("o saldo atual pós procedimento: " + saldoAtual);
                }
            }
            else if (opcao == 4) {
                System.out.println("finalizando");
            }
            else {
                System.out.println("opção inválida, tente novamente");
            }
        }
    }
}

Analisa o código e confere as modificações e diferenças.
Faça as implementações necessárias e me envia um feedback.
Qualquer duvida comente ai.
Bons estudos.