2016-02-03 2 views
0

Я работаю над этой простой задачей под названием «Угадай мой номер», а я пытаюсь реализовать свой код, поэтому, когда пользователь догадывается о правильном номере, приложение отображает «Поздравления» и разрешает пользователю выбирать, будет ли играть снова или нет. Я думаю, что цикл while сделает это, но Im все еще не уверен, как это реализовать. Есть идеи?. Заранее благодарю!Как использовать Do While loop в игре «Guess my number»?

Вот мой код, который работает отлично.

 Random random = new Random(); 
     while (true) 
     { 
      int randomNumber = random.Next(1, 5); 
      int counter = 1; 
      while (true) 
      { 
       Console.Write("Guess a number between 1 and 5"); 
       int input = Convert.ToInt32(Console.ReadLine()); 

       if (input < randomNumber) 
       { 
        Console.WriteLine("Too low, try again."); 
        ++counter; 
        continue; 
       } 
       else if (input > randomNumber) 
       { 
        Console.WriteLine("Too high, try again."); 
        ++counter; 
        continue; 
       } 
       else 
       { 
        Console.WriteLine("Congratulations. You guessed the number!"); 
        break; 
       } 
      } 
     } 
+0

Вы можете добавить запрос на ввод и переменную перед «break;», а затем сразу же проверить после второго цикла while, если вход «да». Если да, продолжайте. Если это не так, сломайте. Причина, по которой я не решаюсь поставить это в качестве ответа, я еще не изучил C# и не имею возможности проверить код, который я бы написал (пока). – Spencer4134

ответ

3

Вы можете добавить логический флаг, чтобы установить внутри самого внешнего петля для сломаться, если пользователь говорит «Нет»:

Random random = new Random(); 
     while (true) 
     { 
      int randomNumber = random.Next(1, 5); 
      int counter = 1; 
      bool retry = true; 
      while (true) 
      { 
       Console.Write("Guess a number between 1 and 5"); 
       int input = Convert.ToInt32(Console.ReadLine()); 

       if (input < randomNumber) 
       { 
        Console.WriteLine("Too low, try again."); 
        ++counter; 
        continue; 
       } 
       else if (input > randomNumber) 
       { 
        Console.WriteLine("Too high, try again."); 
        ++counter; 
        continue; 
       } 
       else 
       { 
        Console.WriteLine("Congratulations. You guessed the number!"); 
        Console.WriteLine("Would you like to retry? y/n"); 
        string answer = Console.ReadLine(); 
        if (answer != "y") 
        { 
         retry = false; 
        } 
        break; 
       } 

      } 
      if (!retry) break; 

     } 

и для сделай-а версии:

bool retry = true; 
    Random random = new Random(); 
    do 
    { 
     int randomNumber = random.Next(1, 5); 
     int counter = 1; 

     while (true) 
     { 
      Console.Write("Guess a number between 1 and 5"); 
      int input = Convert.ToInt32(Console.ReadLine()); 

      if (input < randomNumber) 
      { 
       Console.WriteLine("Too low, try again."); 
       ++counter; 
       continue; 
      } 
      else if (input > randomNumber) 
      { 
       Console.WriteLine("Too high, try again."); 
       ++counter; 
       continue; 
      } 
      else 
      { 
       Console.WriteLine("Congratulations. You guessed the number!"); 
       Console.WriteLine("Would you like to retry? y/n"); 
       string answer = Console.ReadLine(); 
       if (answer != "y") 
       { 
        retry = false; 
       } 
       break; 
      } 

     } 
    } while (retry); 
+1

Большое спасибо за помощь! – HenryDev

+0

Почему бы вам не использовать повторную попытку и сделать while для внешнего цикла вместо if-condition? – Jannik

+1

@Jannik мы могли бы, нам просто нужно было бы переместить повтор в область случайной переменной. Я могу добавить это к ответу – Tyress

1

Реализация делать .. в то время как цикл в коде очень просто нет большой разницы

Random random = new Random(); 
     do 
     { 
      int randomNumber = random.Next(1, 5); 
      int counter = 1; 
      do 
      { 
       Console.Write("Guess a number between 1 and 5"); 
       int input = Convert.ToInt32(Console.ReadLine()); 

       if (input < randomNumber) 
       { 
        Console.WriteLine("Too low, try again."); 
        ++counter; 
        continue; 
       } 
       else if (input > randomNumber) 
       { 
        Console.WriteLine("Too high, try again."); 
        ++counter; 
        continue; 
       } 
       else 
       { 
        Console.WriteLine("Congratulations. You guessed the number!"); 
        break; 
       } 
      }while (true); 
     }while (true); 

Надежда, что помогает ...

+0

Вы проверили свой код? он, кажется, не работает ... – HenryDev

+0

@ Хенри забыл полуколоны после того, как сейчас, работая сейчас, пров. – indago