Непрерывный цикл в C # - PullRequest
0 голосов
/ 29 мая 2018

Я недавно начал изучать C # и начал делать простые программы, основанные на блок-схеме о шутках (http://prntscr.com/jo656t).

Однако, когда я нахожусь на части блок-схемы о "Хотите ли вы услышать другого?"шутка? "Я абсолютно не знаю, как это зациклить.

Вот код.

class Program
{
    static void Main(string[] args)
    { 
        Console.BackgroundColor = ConsoleColor.Black;
        Console.ForegroundColor = ConsoleColor.White;

        string Name;

        Console.WriteLine("What is your name? ");
        Name = Console.ReadLine();
        Console.Write(Name);
        Console.Clear();

        Console.WriteLine("What is your age?");
        int Age = Convert.ToInt16(Console.ReadLine());
        Console.Write(Age);
        Console.Clear();

        string[] jokes = new string[] { "Joke1", "Joke2", "Joke3", "Joke4" };
        int upper = jokes.GetUpperBound(0);
        int lower = jokes.GetLowerBound(0);

        Random rnd = new Random();
        int jk = rnd.Next(lower, upper + 1);     

        if (Age >= 16)
        {
            Console.WriteLine("Do you want to hear a joke?"); 
            string option = Console.ReadLine();

            if (option == "yes")
            {
                Console.WriteLine(jokes[jk]);
                Console.Read();

                Console.WriteLine("Do you want to hear another joke?");
                string option2 = Console.ReadLine();

                int i; 
                if (option2 == "yes")
                {
                    i = 0;
                }
                else
                {
                    i = 1;
                }

                do
                {
                    Console.WriteLine(jokes[jk]);
                    Console.Read();
                } while (i == 0); 
            } 
            else
            {
                Console.WriteLine("Have a nice day, " + Name);
                Console.Read();
            } 
        }
        else
        {
            Console.WriteLine("What a pitty! You're too young to hear this joke!");
            Console.Read();
            Console.WriteLine("Have a nice day, " + Age);
        }
    }

Я понятия не имею, так как я полностью застрял в этой точке, и помощь будетприветствуется.

Заранее спасибо!

Ответы [ 3 ]

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

Блок-схему можно разделить на три основные части:

  1. Задание предварительных вопросов, чтобы решить, стоит ли начинать рассказывать анекдоты
  2. Рассказывать анекдоты
  3. Завершение программы

Средняя часть (от msgbox "joke()" до msgbox "would you like to hear another joke?") кодируется с использованием петли do / while.Было бы полезно сделать это отдельным методом:

private static void TellJokes() {
    bool shouldContinue;
    do {
        shouldContinue = true;
        ... // Tell a joke, ask if they liked it, and ask if they want more
        if (answer == "no") {
            shouldContinue = false;
        }
    } while (shouldContinue);
}

Обратите внимание, что вы можете переместить печать "Have a nice day!" в конец вашей программы, потому что все ветви в конечном итоге печатают ее.

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

Вы можете сделать это следующим образом

    Random rnd = new Random();
    int jk;  
    string option;

    if (Age >= 16)
    {
        Console.WriteLine("Do you want to hear a joke?"); 
        option = Console.ReadLine();

        while (option == "yes")
        {
            jk = rnd.Next(lower, upper + 1);    
            Console.WriteLine(jokes[jk]);
            Console.Read();

            Console.WriteLine("Do you want to hear a joke?"); 
            option = Console.ReadLine();
        } 
        Console.WriteLine("Have a nice day, " + Name);
        Console.Read();
    }
    else
    {
        Console.WriteLine("What a pitty! You're too young to hear this joke!");
        Console.Read();
        Console.WriteLine("Have a nice day, " + Age);
    }

Я предлагаю позаботиться об ответе пользователя, вы можете сделать что-то вроде этого

do
{
        Console.WriteLine("Do you want to hear a joke?"); 
        option = Console.ReadLine();
}
while((option.ToLower() != "yes") || (option.ToLower() != "no") )
0 голосов
/ 29 мая 2018

Лично я бы попытался переписать код, чтобы он был более читабельным, но что-то вроде этого должно работать:

bool keepTellingJokes = true;    

while (keepTellingJokes) 
{
    // your joke code here

    Console.WriteLine("Do you want to hear another joke?");
    string option2 = Console.ReadLine();

    // break out of loop
    if (option2 == "no")
    {
        keepTellingJokes = false;
    } 
}
// code after escaping joke loop

Отказ от ответственности: я не пишу c # ежедневно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...