Mobile App Development · Dart/Flutter

16 · Desafio Mega Sena — Exercícios

Três passos até o sorteio sem repetição: um número aleatório, uma lista que pode repetir e, por fim, um Set que resolve o problema.

Exercício 1

exercicio_01_numero_aleatorio.dart

Gera e exibe um único número aleatório entre 1 e 60 usando Random. Base para os dois exercícios seguintes, que expandem essa ideia para 6 números.

// Exercício 1: gerar um único número aleatório entre 1 e 60.
import 'dart:math';

void main() {
  final random = Random();

  // nextInt(60) sorteia um inteiro entre 0 e 59; somamos 1 para cobrir 1 a 60.
  final numeroSorteado = random.nextInt(60) + 1;

  print('Número sorteado: $numeroSorteado');
}

Saída esperada

Como o programa usa Random, a saída varia a cada execução. Exemplo de saída possível:

Número sorteado: 27

Como executar

dart run 16-Desafio_MegaSena/02_Exercicios/codigo_fonte/exercicio_01_numero_aleatorio.dart

Exercício 2

exercicio_02_lista_com_repeticao.dart

Gera uma lista com 6 números aleatórios entre 1 e 60 usando List<int> e um laço for. Como a lista não impede duplicatas, rodar o programa algumas vezes mostra que números repetidos podem aparecer — o problema que o exercício 3 e o desafio final precisam resolver.

// Exercício 2: gerar uma lista de 6 números aleatórios entre 1 e 60.
// Atenção: usando List, números repetidos podem aparecer no resultado.
import 'dart:math';

void main() {
  final random = Random();
  final numeros = <int>[];

  for (var i = 0; i < 6; i++) {
    numeros.add(random.nextInt(60) + 1);
  }

  print('Números sorteados (podem repetir): $numeros');
}

Saída esperada

A saída varia a cada execução e pode conter números repetidos. Exemplo de saída possível:

Números sorteados (podem repetir): [12, 45, 12, 3, 58, 21]

Como executar

dart run 16-Desafio_MegaSena/02_Exercicios/codigo_fonte/exercicio_02_lista_com_repeticao.dart

Exercício 3

exercicio_03_lista_sem_repeticao.dart

Resolve o problema do exercício 2 usando um Set<int>, que não permite valores duplicados. O laço while continua sorteando até o Set acumular 6 números distintos; depois converte para List e ordena antes de exibir.

// Exercício 3: gerar 6 números aleatórios entre 1 e 60 sem repetição.
// Set não permite valores duplicados, então resolve o problema do exercício 2.
import 'dart:math';

void main() {
  final random = Random();
  final sorteados = <int>{};

  // Continua sorteando até o Set acumular 6 números distintos.
  while (sorteados.length < 6) {
    sorteados.add(random.nextInt(60) + 1);
  }

  final resultado = sorteados.toList()..sort();

  print('Números sorteados (sem repetição): $resultado');
}

Saída esperada

A saída varia a cada execução, mas nunca terá números repetidos e sempre virá ordenada. Exemplo de saída possível:

Números sorteados (sem repetição): [5, 14, 19, 30, 41, 56]

Como executar

dart run 16-Desafio_MegaSena/02_Exercicios/codigo_fonte/exercicio_03_lista_sem_repeticao.dart