none
Dúvida sobre loop DO WHILE RRS feed

  • Pergunta

  • Bom dia amigos, sou estudante iniciante na linguagem C#, estava fazendo esse código para praticar mas estou com uma dúvida no loop while, a ideia do meu código é a seguinte: Um "jogo" com dois jogares onde um jogador digita uma palavra e o outro tenta "adivinhar", caso o jogador adivinhe a palavra, este ganha 1 ponto. Vence aquele que acumular 3 pontos primeiro. Mas estou com um problema, ao invés do meu loop encerrar quando um dos dois jogadores alcança 3 pontos, ele só encerra quando ambos os jogadores alcançam 3 pontos, alguém poderia me explicar onde estou errando?

    Eis o código:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;

    namespace Jogo_da_Forca
    {
        class Program
        {
            static void Main(string[] args)
            {
                 
               //  Pontos pontuacao = new Pontos();

               int ponto1 = 0;
               int ponto2 = 0;

                Console.WriteLine("Jogo da Forca - Um jogador irá escrever uma palavra e outro tentará adivinhar, cada rodada vale um ponto, ganha quem pontuar 3 pontos");
                Console.WriteLine("Jogador 1, digite o seu nome");
                string nome1 = Console.ReadLine();
                Console.WriteLine("Jogador 2, digite o seu nome");
                string nome2 = Console.ReadLine();

                do {
                Console.WriteLine(nome1 + ", escolha uma palavra");
                string palavra = Console.ReadLine();
                Console.WriteLine(nome2 + ", tente acertar a palavra escolhida");
                string tentativa = Console.ReadLine();


                if (palavra == tentativa) {
                 ponto2++;
                 Console.WriteLine("Parabéns," + nome2 +" você acertou e ganhou 1 ponto, seu placar é de: " + ponto2 + " pontos");
                        
                } else
                 Console.WriteLine("Você errou");

                Console.WriteLine(nome2 + ", escolha uma palavra");
                palavra = Console.ReadLine();
                Console.WriteLine(nome1 + ", tente acertar a palavra escolhida");
                tentativa = Console.ReadLine();

                if (palavra == tentativa) {
                 ponto1++;
                 Console.WriteLine("Parabéns, " + nome1 + " você acertou e ganhou 1 ponto, seu placar é de: " + ponto1 + " pontos");
                        
                } else
                 Console.WriteLine("Você errou");

                } while ((ponto1 <= 2) || (ponto2 <= 2));

               

                if (ponto1 == 3) {
                 Console.WriteLine("O vencedor foi " + nome1);
                } else if (ponto2 == 3)
                 Console.WriteLine("O vencedor foi " + nome2);

                 Console.ReadKey();




            }
        }
    }

    sexta-feira, 6 de novembro de 2020 13:39

Respostas

  • Bom dia,

    Acho que isso está ocorrendo porque você está utilizando o operador Or (||) no seu while, ou seja, enquanto um ou outro é menor ou igual a 2.

    Experimente trocar o Or por And.

    Espero que ajude


    Assinatura: http://www.imoveisemexposicao.com.br

    • Marcado como Resposta Hamurabi123 domingo, 8 de novembro de 2020 03:22
    sexta-feira, 6 de novembro de 2020 13:51
  • Conforme o gapimex disse, se você alterar essa linha: 

     } while ((ponto1 <= 2) || (ponto2 <= 2));

    por essa :

     } while ((ponto1 <= 2) && (ponto2 <= 2));

    irá funcionar de acordo com o que vc quer.

    Lembrando que o 'E - &&' será verdade apenas quando todas as condições forem verdadeiras, diferentemente do 'OU - ||'  que terá valor verdadeiro quando apenas uma das condições for verdade e a outra falsa.


    • Marcado como Resposta Hamurabi123 domingo, 8 de novembro de 2020 03:22
    sábado, 7 de novembro de 2020 19:49

Todas as Respostas

  • Bom dia,

    Acho que isso está ocorrendo porque você está utilizando o operador Or (||) no seu while, ou seja, enquanto um ou outro é menor ou igual a 2.

    Experimente trocar o Or por And.

    Espero que ajude


    Assinatura: http://www.imoveisemexposicao.com.br

    • Marcado como Resposta Hamurabi123 domingo, 8 de novembro de 2020 03:22
    sexta-feira, 6 de novembro de 2020 13:51
  • Conforme o gapimex disse, se você alterar essa linha: 

     } while ((ponto1 <= 2) || (ponto2 <= 2));

    por essa :

     } while ((ponto1 <= 2) && (ponto2 <= 2));

    irá funcionar de acordo com o que vc quer.

    Lembrando que o 'E - &&' será verdade apenas quando todas as condições forem verdadeiras, diferentemente do 'OU - ||'  que terá valor verdadeiro quando apenas uma das condições for verdade e a outra falsa.


    • Marcado como Resposta Hamurabi123 domingo, 8 de novembro de 2020 03:22
    sábado, 7 de novembro de 2020 19:49
  • era isso mesmo amigo, obrigado!
    domingo, 8 de novembro de 2020 03:23
  • obrigado! agora ficou claro pra mim
    domingo, 8 de novembro de 2020 03:24