Exercício - Crie lógica de decisão aninhada com if, else if e else

Concluído

Na unidade anterior, você usou várias if instruções para implementar as regras de um jogo. No entanto, no final da unidade, você notou que instruções mais expressivas if são necessárias para corrigir um bug sutil em seu código.

Neste exercício, você usará if, elsee instruções para melhorar as opções de ramificação em seu código e else if corrigir um bug lógico.

Use instruções if e else em vez de duas instruções if separadas

Em vez de executar duas verificações para exibir a mensagem "Você ganha!" ou "Desculpe, você perde", você usará a else palavra-chave.

  1. Certifique-se de que o código .cs programa corresponde ao seguinte:

    Random dice = new Random();
    
    int roll1 = dice.Next(1, 7);
    int roll2 = dice.Next(1, 7);
    int roll3 = dice.Next(1, 7);
    
    int total = roll1 + roll2 + roll3;
    
    Console.WriteLine($"Dice roll: {roll1} + {roll2} + {roll3} = {total}");
    
    if ((roll1 == roll2) || (roll2 == roll3) || (roll1 == roll3))
    {
        Console.WriteLine("You rolled doubles! +2 bonus to total!");
        total += 2;
    }
    
    if ((roll1 == roll2) && (roll2 == roll3)) 
    {
        Console.WriteLine("You rolled triples! +6 bonus to total!");
        total += 6;
    }
    
    if (total >= 15)
    {
        Console.WriteLine("You win!");
    }
    
    if (total < 15)
    {
        Console.WriteLine("Sorry, you lose.");
    }
    
    

    Este é o código que você completou na unidade anterior.

  2. Reserve um minuto para examinar as duas if declarações no final do arquivo:

    if (total >= 15)
    {
        Console.WriteLine("You win!");
    }
    
    if (total < 15)
    {
        Console.WriteLine("Sorry, you lose.");
    }
    
    

    Observe que ambas as if instruções se comparam total com o mesmo valor numérico. Esta é a oportunidade perfeita para usar uma else declaração.

  3. Atualize as duas if instruções da seguinte forma:

    if (total >= 15)
    {
        Console.WriteLine("You win!");
    }
    else 
    {
        Console.WriteLine("Sorry, you lose.");
    }
    
    

    Aqui, se total >= 15 for false, o bloco de código que segue a else palavra-chave será executado. Uma vez que os dois resultados são opostos relacionados, este é um cenário perfeito para a else palavra-chave.

  4. O arquivo .cs programa atualizado deve conter o seguinte código:

    Random dice = new Random();
    
    int roll1 = dice.Next(1, 7);
    int roll2 = dice.Next(1, 7);
    int roll3 = dice.Next(1, 7);
    
    int total = roll1 + roll2 + roll3;
    
    Console.WriteLine($"Dice roll: {roll1} + {roll2} + {roll3} = {total}");
    
    if ((roll1 == roll2) || (roll2 == roll3) || (roll1 == roll3))
    {
        Console.WriteLine("You rolled doubles!  +2 bonus to total!");
        total += 2;
    }
    
    if ((roll1 == roll2) && (roll2 == roll3))
    {
        Console.WriteLine("You rolled triples!  +6 bonus to total!");
        total += 6;
    }
    
    if (total >= 15)
    {
        Console.WriteLine("You win!");
    }
    else 
    {
        Console.WriteLine("Sorry, you lose.");
    }
    
    

Modifique o código para remover o bônus de empilhamento para duplos e triplos usando aninhamento

Na unidade anterior, você viu que um bug de lógica sutil foi introduzido em seu aplicativo. Você pode corrigir esse problema aninhando suas if declarações.

O aninhamento permite que você coloque blocos de código dentro de blocos de código. Neste caso, você aninhará uma if combinação (o cheque para duplas) dentro de outra if declaração (elseo cheque para triplos) para evitar que ambos os bônus sejam concedidos.

  1. Modifique o código para corresponder à seguinte listagem de código:

    Random dice = new Random();
    
    int roll1 = dice.Next(1, 7);
    int roll2 = dice.Next(1, 7);
    int roll3 = dice.Next(1, 7);
    
    int total = roll1 + roll2 + roll3;
    
    Console.WriteLine($"Dice roll: {roll1} + {roll2} + {roll3} = {total}");
    
    if ((roll1 == roll2) || (roll2 == roll3) || (roll1 == roll3))
    {
        if ((roll1 == roll2) && (roll2 == roll3))
        {
            Console.WriteLine("You rolled triples!  +6 bonus to total!");
            total += 6;
        }
        else
        {
            Console.WriteLine("You rolled doubles!  +2 bonus to total!");
            total += 2;
        }
    }
    
    if (total >= 15)
    {
        Console.WriteLine("You win!");
    }
    else 
    {
        Console.WriteLine("Sorry, you lose.");
    }
    
    
  2. Reserve um minuto para revisar as instruções aninhadas if .

    O objetivo é criar uma construção interna if-else onde os dois resultados são opostos relacionados e, em seguida, usar os resultados opostos (se/verdadeiro e outro/falso) para conceder os pontos de bônus para triplos e duplos. Para atingir esse objetivo, você verifica se há duplos na declaração externa if e, em seguida, triplos na declaração interna if . Esse padrão garante que, quando a verificação interna para triplos retornar false, seu else bloco de código possa conceder os pontos para duplos.

    Em seguida, você "codificará" os resultados de seus três rolos para testar sua lógica de código.

  3. Crie uma linha de código em branco acima da linha onde total é declarada e inicializada.

  4. Para testar um rolo de duplas, digite o seguinte código:

    roll1 = 6;
    roll2 = 6;
    roll3 = 5;
    

    A codificação rígida das três roll variáveis permite que você teste o código sem ter que executar o aplicativo dezenas de vezes.

  5. No menu Arquivo de código do Visual Studio, clique em Salvar.

  6. No painel EXPLORER, para abrir um Terminal no local da pasta TestProject, clique com o botão direito do mouse em TestProject e selecione Abrir no Terminal Integrado.

    Um painel Terminal deve ser aberto e deve incluir um prompt de comando mostrando que o Terminal está aberto para o local da pasta TestProject.

  7. No prompt de comando do Terminal, para executar o código, digite dotnet run e pressione Enter.

    Quando o código é executado, você deve ver:

    Dice roll: 6 + 6 + 5 = 17
    You rolled doubles!  +2 bonus to total!
    You win!
    
    
  8. Para testar um rolo de triplos, atualize suas variáveis de rolo codificadas da seguinte maneira:

    roll1 = 6;
    roll2 = 6;
    roll3 = 6;
    
  9. No menu Arquivo de código do Visual Studio, clique em Salvar.

  10. No painel EXPLORER, para abrir um Terminal no local da pasta TestProject, clique com o botão direito do mouse em TestProject e selecione Abrir no Terminal Integrado.

  11. No prompt de comando do Terminal, para executar o código, digite dotnet run e pressione Enter.

    Quando o código é executado, você deve ver:

    Dice roll: 6 + 6 + 6 = 18
    You rolled triples!  +6 bonus to total!
    You win!
    
    

Use if, else e else if declarações para dar um prêmio em vez de uma mensagem ganha-perde

Para tornar o jogo mais divertido, você pode mudar o jogo de "ganhar ou perder" para atribuir prêmios fictícios para cada pontuação. Pode oferecer quatro prémios. No entanto, o jogador deve ganhar apenas um prémio:

  • Se o jogador obtiver uma pontuação maior ou igual a 16, ganhará um carro novo.
  • Se o jogador obtiver uma pontuação maior ou igual a 10, ganhará um computador portátil novo.
  • Se o jogador obtiver uma pontuação igual a 7, ganhará uma viagem.
  • Caso contrário, o jogador ganha um gatinho.
  1. Modifique o código dos passos anteriores para a seguinte listagem de código:

    Random dice = new Random();
    
    int roll1 = dice.Next(1, 7);
    int roll2 = dice.Next(1, 7);
    int roll3 = dice.Next(1, 7);
    
    int total = roll1 + roll2 + roll3;
    
    Console.WriteLine($"Dice roll: {roll1} + {roll2} + {roll3} = {total}");
    
    if ((roll1 == roll2) || (roll2 == roll3) || (roll1 == roll3))
    {
        if ((roll1 == roll2) && (roll2 == roll3))
        {
            Console.WriteLine("You rolled triples!  +6 bonus to total!");
            total += 6;
        }
        else
        {
            Console.WriteLine("You rolled doubles!  +2 bonus to total!");
            total += 2;
        }
    
        Console.WriteLine($"Your total including the bonus: {total}");
    }
    
    if (total >= 16)
    {
        Console.WriteLine("You win a new car!");
    }
    else if (total >= 10)
    {
        Console.WriteLine("You win a new laptop!");
    }
    else if (total == 7)
    {
        Console.WriteLine("You win a trip for two!");
    }
    else
    {
        Console.WriteLine("You win a kitten!");
    }
    
    
  2. Reserve um minuto para revisar a construção atualizada if-elseif-else .

    As ifinstruções , , else ife else permitem que você crie várias condições exclusivas como expressões booleanas. Em outras palavras, quando você quer que apenas um resultado aconteça, mas você tem várias condições e resultados possíveis, use quantas else if declarações quiser. Se nenhuma das if instruções e else if se aplicar, o bloco de código final else será executado. O else é opcional, mas deve vir por último se você optar por incluí-lo.

  3. Use a técnica de codificação temporária das roll variáveis para testar cada mensagem.

Recapitulação

  • A combinação de if instruções e else permite que você teste uma condição e, em seguida, execute um dos dois resultados. O bloco de código para o será executado quando a expressão booleana for , e o bloco de código para o if será executado quando a expressão booleana for falsetrue.else
  • Você pode aninhar if instruções para restringir uma possível condição. No entanto, você deve considerar usar as ifinstruções , else ife else em vez disso.
  • Use else if instruções para criar várias condições exclusivas.
  • Um else é opcional, mas deve sempre vir por último quando incluído.