1
resposta

[Projeto] Lista de Exercícios - Dando uma nova chance no retorno de mês

  1. Dando uma nova chance no retorno de mês
import 'dart:io';

void main() {
  String? mes = '';
  String? entrada = '';

  void mesDigitado() {
    switch (mes) {
      case '1':
        print('Janeiro');
        break;
      case '2':
        print('Fevereiro');
        break;
      case '3':
        print('Março');
        break;
      case '4':
        print('Abril');
        break;
      case '5':
        print('Maio');
        break;
      case '6':
        print('Junho');
        break;
      case '7':
        print('Julho');
        break;
      case '8':
        print('Agosto');
        break;
      case '9':
        print('Setembro');
        break;
      case '10':
        print('Outubro');
        break;
      case '11':
        print('Novembro');
        break;
      case '12':
        print('Dezembro');
        break;
    }
  }

  void digiteOMes() {
    print('Digite um número de 1 a 12');
    entrada = stdin.readLineSync();

    if (entrada != null && entrada!.isNotEmpty) {
      mes = entrada;
    }
  }

  digiteOMes();

  if (int.parse(mes!) > 1 && int.parse(mes!) < 12) {
    mesDigitado();
  } else {
    print('Mês digitado não pode ser menor que 1 nem maior que 12');
    digiteOMes();
    mesDigitado();
  }
}
1 resposta

Oi Charles,

Seu código está quase perfeito! 👍

A lógica para obter o mês está funcionando, mas notei alguns pontos que podem ser melhorados.

O problema principal está na condição if (int.parse(mes!) > 1 && int.parse(mes!) < 12). Ela não cobre todos os casos válidos, pois exclui os meses 1 e 12. O correto seria if (int.parse(mes!) >= 1 && int.parse(mes!) <= 12).

Além disso, você está chamando digiteOMes() e mesDigitado() novamente dentro do else, o que pode levar a um loop caso o usuário continue digitando valores inválidos.

Uma solução seria usar um loop while para garantir que o usuário digite um valor válido antes de prosseguir.

Aqui está uma sugestão de como você pode refatorar seu código:

import 'dart:io';

void main() {
  String? mes;

  String? obterMes() {
    String? entrada;
    do {
      print('Digite um número de 1 a 12');
      entrada = stdin.readLineSync();
      if (entrada == null || entrada.isEmpty) {
        print('Entrada inválida. Tente novamente.');
      }
    } while (entrada == null || entrada.isEmpty);
    return entrada;
  }

  void mesDigitado(String mes) {
    switch (mes) {
      case '1':
        print('Janeiro');
        break;
      case '2':
        print('Fevereiro');
        break;
      case '3':
        print('Março');
        break;
      case '4':
        print('Abril');
        break;
      case '5':
        print('Maio');
        break;
      case '6':
        print('Junho');
        break;
      case '7':
        print('Julho');
        break;
      case '8':
        print('Agosto');
        break;
      case '9':
        print('Setembro');
        break;
      case '10':
        print('Outubro');
        break;
      case '11':
        print('Novembro');
        break;
      case '12':
        print('Dezembro');
        break;
      default:
        print('Mês inválido');
    }
  }

  do {
    mes = obterMes();
    if (int.tryParse(mes!) == null || int.parse(mes!) < 1 || int.parse(mes!) > 12) {
      print('Mês digitado não pode ser menor que 1 nem maior que 12. Tente novamente.');
      mes = null;
    }
  } while (mes == null);

  mesDigitado(mes);
}

Nessa versão, usei um loop do...while para garantir que o usuário digite um número válido entre 1 e 12.

Também adicionei um default no switch para tratar casos inválidos. 💪

Para saber mais: Documentação oficial do Dart sobre controle de fluxo. Este link leva à documentação oficial do Dart, onde você pode aprender mais sobre estruturas de controle como if, else, switch e loops.

Continue praticando e explorando as possibilidades do Dart! 💻