Создание калькулятора, который автоматически сообщает вам, кто проводит хост каждые 6 лет, используя Switch in C# - PullRequest
0 голосов
/ 12 февраля 2020
  • У меня проблема с приведенной ниже проблемой.
  • Я могу получить правильные ответы, но если я введу какие-либо годы более 3 лет для каждого человека, имя {0} будет пустым.
    • Я пытаюсь рассчитать для любого года, а не просто прекратить вычислять, кто его размещает через 3 года после того, как они впервые начали хостинг. Я знаю, что это как-то связано с моим if (годовой модуль? ==?).
  • Пожалуйста, помогите.

Подсчитайте, кто принимает награды Грэмми. Каждый человек должен делать это каждые 3 года. Тупа c принял первую грамматику в 1970 году, что означает, что он будет принимать 1973, 1976, 1979 год ...

Вам нужно рассчитать следующие годы, используя этих людей. Они начали:

  • Тупа c = 1970
  • Ашер = 1971
  • Марио = 1972

Ответы:

  • Введите год: 1973 ... "Здравствуйте, тупа c, вы являетесь хозяином года 1973"

  • Введите год: 1974. .. "Здравствуйте, usher, вы - хозяин 1974 года"

  • Введите год: 1978 ... "Здравствуйте, Марио, вы - хозяин 1978 года"

    static void Main(string[] args)
    {
        int year = 0;
        string name = "";

        Console.Write("Enter the year: ");
        year = int.Parse(Console.ReadLine());

        if (year % 1970 == 3)
        {
            name = "Tupac";
        }
        if (year % 1971 == 3)
        {
            name = "Usher";
        }
        if (year % 1972 == 3)
        {
            name = "Mario";
        }

        switch (year)
        {
            default:
                Console.Write("Hello {0}, you are the host of year {1}", name, year);
                break;
        }
        Console.ReadLine();
    }

}

}

1 Ответ

0 голосов
/ 12 февраля 2020

Я ввел GrammyHost класс и список хостов грамматики:

class GrammyHost
{
    public GrammyHost(string name, int year)
    {
        Name = name;
        Year = year;
    }

    public string Name { get; }

    public int Year { get; }

    public bool ShouldHostGrammyThisYear(int thisYear)
    {
        if (thisYear < Year)
        {
            return false;
        }

        return ((thisYear - Year) % 3) == 0;
    }
}

class Program
{
    private static void Main(string[] args)
    {
        Console.Write("Enter the year: ");

        // Let's create a list of possible hosts
        var grammyHosts = new List<GrammyHost>
        {
            new GrammyHost("Tupac", 1970),
            new GrammyHost("Usher", 1971),
            new GrammyHost("Mario", 1972)
        };

        var thisYear = 0;
        thisYear = int.Parse(Console.ReadLine());

        // Search for this year host
        var thisYearHost = grammyHosts
            .FirstOrDefault(host => host.ShouldHostGrammyThisYear(thisYear));

        // If it's null then there is no host this year...
        if (thisYearHost is null)
        {
            Console.Write("No host this year...");
        }
        else // Otherwise print the host
        {
            Console.Write("Hello {0}, you are the host of year {1}", thisYearHost.Name, thisYear);
        }

        Console.ReadLine();
    }
}

Ваши условия были неверными. Посмотрите на метод ShouldHostGrammyThisYear в классе GrammyHost:

if (thisYear < Year)
{
    return false;
}

return ((thisYear - Year) % 3) == 0;

Сначала мы проверим, является ли этот год действительным в контексте текущего человека. Хост не может вернуться во времени, поэтому, если thisYear предшествует GrammyHost.Year, мы возвращаем false без дальнейших проверок.

Затем, если вы посмотрите на оператор return, мы вычислим разницу, чтобы узнать, сколько лет прошло sinced GrammyHost.Year до thisYear и проверьте, делится ли разница на 3. Другими словами, разница говорит нам, сколько лет прошло с тех пор, как хост впервые принял Грэмми, и если эта разница делится на 3, то это означает, что хост должен принять Грэмми в этом году.

например, скажем, thisYear - это 1973, а GrammyHost.Year - это 1970 (Тупа c). Разница составляет 1973 - 1970 = 3. Мы проверяем, делится ли он на 3, используя оператор % для вычисления остатка, а затем сравнивая его (остаток) с нулем. В случае Tupac разница равна 3, и она действительно делится на 3, поэтому 3% 3 приведет к 0.

Если остаток не равен нулю, то это означает, что разница не делится на 3, поэтому хост не должен принимать Грэмми в этом году.

Также я думаю, что нет необходимости в коммутаторе.

...