Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

A validação não funciona

Informação dos códigos

import 'dart:io';
void main() {
  
    double numeroUm = 0;
    double numeroDois = 0;
    String operacao = "";
    List<String> operacoes = <String>["+", "-", "*", "/"];

      void soma() {
      print(numeroUm + numeroDois);
    }

    void subtracao() {
      print(numeroUm - numeroDois);
    }
    
    void divisao() {
      print(numeroUm / numeroDois); 
    }
    void multiplicacao() {
      print(numeroUm * numeroDois); 
    }

  void calcular() {
    switch (operacao) {
      case "+":
        soma();
        
      case "-":
        subtracao();
        
      case "*":
        multiplicacao();
        
      case "/":
        divisao();
        break;
    }
  }

 print("Digite o primeiro valor");

String? entrada = stdin.readLineSync();

if (entrada != null) {
  if (entrada !="") {
  numeroUm = double.parse(entrada);
  }
}

 void getOperacao() {
    print("Digite uma operação ${operacoes.toString()}");
    entrada = stdin.readLineSync();
    if (entrada != null) {
   }
  }
 

print("Digite o segundo valor");

entrada = stdin.readLineSync();
if (entrada != null) {
    if (entrada != "") {
    numeroDois = double.parse(entrada);      
    }
}

 print("Digite uma operação");

entrada = stdin.readLineSync();
if (entrada != null) {
  operacao = entrada;
}

 
print("O resultado da operação é:");

calcular();

}

Insira aqui a descrição dessa imagem para ajudar na acessibilidade
Insira aqui a descrição dessa imagem para ajudar na acessibilidade

neste trecho do código - erro apresentado

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Matricule-se agora e aproveite até 50% OFF

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

QUERO APROVEITAR
1 resposta
solução!

Olá, Zilda, como vai?

Analisando seus códigos, percebo que a principal diferença entre o seu e o do instrutor está na função getOperacao() e na forma como a variável entrada é tratada. No seu código, essa função apenas lê a entrada, mas não faz a verificação se ela é válida dentro da lista de operações (["+", "-", "*", "/"]). Já no código do instrutor, há uma validação com if (operacoes.contains(entrada)), que garante que a operação digitada exista antes de atribuí-la à variável operacao.

Por exemplo, se a pessoa digitar “+”, o programa confere se esse símbolo está dentro da lista e só então define a variável operacao. Caso digite algo como “x”, ele mostra “Operação inválida” e chama novamente a função getOperacao() para pedir uma nova entrada. Isso cria uma camada extra de segurança no código, evitando erros e melhorando a experiência de quem utiliza o programa.

Outro ponto importante é a declaração de entrada logo no início do código, como String? entrada = "";. Isso impede o erro de variável não inicializada e torna o código mais estável.

Poderia corrigir o código assim:

import 'dart:io';

void main() {
  double numeroUm = 0;
  double numeroDois = 0;
  String operacao = "";
  String? entrada = "";
  List<String> operacoes = <String>["+", "-", "*", "/"];

  void soma() {
    print(numeroUm + numeroDois);
  }

  void subtracao() {
    print(numeroUm - numeroDois);
  }

  void divisao() {
    print(numeroUm / numeroDois);
  }

  void multiplicacao() {
    print(numeroUm * numeroDois);
  }

  void calcular() {
    switch (operacao) {
      case "+":
        soma();

      case "-":
        subtracao();

      case "*":
        multiplicacao();

      case "/":
        divisao();
        break;
    }
  }

  void getOperacao() {
    print("Digite uma operação ${operacoes.toString()}");
    entrada = stdin.readLineSync();
    if (entrada != null) {
      if (operacoes.contains(entrada)) {
        operacao = entrada!;
      } else {
        print("Operação inválida");
        getOperacao();
      }
    }
  }

  print("Digite o primeiro valor");

  entrada = stdin.readLineSync();

  if (entrada != null) {
    if (entrada != "") {
      numeroUm = double.parse(entrada!);
    }
  }

  getOperacao();

  print("Digite o segundo valor");

  entrada = stdin.readLineSync();
  if (entrada != null) {
    if (entrada != "") {
      numeroDois = double.parse(entrada!);
    }
  }

  print("O resultado da operação é:");

  calcular();
}

Espero ter ajudado.

Siga firme nos seus estudos e conte com o fórum sempre que precisar.

Abraços :)

Caso este post tenha lhe ajudado, por favor, marcar como solucionado