Не удается активировать bools или деактивировать их в цикле while C # - PullRequest
0 голосов
/ 22 мая 2018

Я работаю над проблемой на Codeeasy.net, и я не могу до конца жизни понять это.Если бы кто-то мог мне помочь.Это то, что он должен делать.

class AntivirusScan
{
    static void Main(string[] args)         
    {
        int fileIndex     = 0;
        bool hideMode     = false;
        bool heDoesntKnow = true;

        while (heDoesntKnow)
        {
            string answer = Console.ReadLine();

            if (answer == "scan")
            {
                fileIndex = fileIndex + 1;
                Console.WriteLine($"scanning file {fileIndex}");
            }

            if (hideMode == true)
                 Console.WriteLine($"can't scan files for viruses");
            if (answer == "hide")
            {
                Console.WriteLine($"can't scan files for viruses");
                hideMode = true;
            }
            if (answer == "unhide")
            {
                fileIndex=fileIndex+1;
                Console.WriteLine($"scanning file {fileIndex}");
                hideMode=false;
            }

            if (answer == "game over")
            {
                Console.WriteLine($"run");
                heDoesntKnow = false;
             }
         }
     }
 }

Это мой код.Предполагается, что он не может сканировать, если он скрыт.Вместо этого он просто проходит через это.Он появляется один раз, а затем продолжает не делать то, что должен.

Предполагается прочитать из приглашения, которое

scan
scan
hide
scan
scan
unhide
scan
game over

Это то, что он выводит

scanning file 1
scanning file 2
can't scan files for viruses

scanning file 3
can't scan files for viruses

scanning file 4
can't scan files for viruses
can't scan files for viruses

scanning file 5
scanning file 6
run

Это то, что он должен выводить

scanning file 1
scanning file 2
can't scan files for viruses
can't scan files for viruses
scanning file 3
run

Ответы [ 2 ]

0 голосов
/ 22 мая 2018

Проблема в том, что ваша проверка на скрытие выполняется после вместо оператора if для сканирования.Я также сделал ваш код немного более читабельным и упростил несколько утверждений.

using System;

namespace WhileLoop
{
    class AntivirusScan
    {
         static void Main(string[] args)
         {
           int fileIndex = 0;
           bool hideMode = false;
           bool heDoesntKnow = true;

           while (heDoesntKnow)
            {
                     string answer = Console.ReadLine();
                     if (answer == "scan") {
                        if (hideMode) {
                            Console.WriteLine($"can't scan files for viruses");
                         } else {
                            fileIndex++;
                            Console.WriteLine($"scanning file {fileIndex}");
                         }
                     }

                     if(answer == "hide")
                     {
                        Console.WriteLine($"can't scan files for viruses");
                        hideMode=true;
                     }

                     if (answer == "unhide")
                     {
                        fileIndex=fileIndex+1;
                        Console.WriteLine($"scanning file {fileIndex}");
                        hideMode=false;
                     }

                     if (answer == "game over")
                     {
                        Console.WriteLine($"run");
                        heDoesntKnow = false;
                     }
          }
     }
 }}
0 голосов
/ 22 мая 2018


Исходя из ожидаемого результата, я предполагаю, что входные данные:

1) сканирование
2) сканирование
3) скрыть
4) сканирование
5)unhide
6) игра окончена

Итак, в соответствии с вашим кодом, я думаю, что вам нужно добавить еще одно ограничение для первого условия if:

 if (answer == "scan")
 {
   fileIndex=fileIndex+1;
   Console.WriteLine($"scanning file {fileIndex}");
  }

Это должно быть измененов

if (answer == "scan" && !hideMode)
 {
   fileIndex=fileIndex+1;
   Console.WriteLine($"scanning file {fileIndex}");
 }

, чтобы этот блок не выполнялся, когда hideMode имеет значение true.И переместите свой блок if (answer == 'hide') {}, чтобы он был после проверки сканирования.

Окончательный код:

с использованием системы;

namespace WhileLoop
{
    class AntivirusScan
    {
         static void Main(string[] args)
        {
int fileIndex = 0;
bool hideMode = false;
bool heDoesntKnow = true;

          while (heDoesntKnow)
            {
                string answer = Console.ReadLine();
                if (answer == "scan" && !hideMode)
                {
                    fileIndex = fileIndex + 1;
                    Console.WriteLine($"scanning file {fileIndex}");
                }

                if (answer == "unhide")
                {
                    fileIndex = fileIndex + 1;
                    Console.WriteLine($"scanning file {fileIndex}");
                    hideMode = false;
                }

                if (hideMode == true)
                {
                    Console.WriteLine($"can't scan files for viruses");
                }
                if (answer == "hide")
                {
                    Console.WriteLine($"can't scan files for viruses");
                    hideMode = true;
                }


                if (answer == "game over")
                {
                    Console.WriteLine("run");
                    heDoesntKnow = false;
                }
            }
     }
 }}

Надеюсь, это поможет:)

...