Как вы выравниваете данные массива по сравнению с другим массивом, когда индекс не синхронизирован? - PullRequest
0 голосов
/ 23 ноября 2018

Я создал игру «Выбери свое дело», используя массив денежных призов со всеми суммами призов и номерами дел, которые может выбрать пользователь.Когда они выбирают номер, он говорит пользователю, что в их случае.Тем не менее, в конце он выплевывает все случаи и то, что было в каждом из них, и данные смещены на один индекс.

    static void Main(string[] args)
    {
        int[] cashPrizeArray = new int[26] { 0, 1, 2, 5, 10, 20, 50, 100, 150, 200, 250, 500, 750, 1000, 2000, 3000, 4000, 5000, 10000, 15000, 20000, 25000, 50000, 75000, 100000, 200000 };
        int[] caseArray = new int[26] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26 };
        Array.Sort(cashPrizeArray);

        Random rnd = new Random();
        int[] cashPrizeArrayR = cashPrizeArray.OrderBy(x => rnd.Next()).ToArray();
        foreach (int i in cashPrizeArrayR)
        {
            Console.Write("{0} ", i);
        }

        Console.WriteLine("\n(please ignore the numbers above)\n\n\nDeal or Not!");
        Console.Write("Choose a case: 1-26: ");
        int userCase = int.Parse(Console.ReadLine());

        if (!caseArray.Contains(userCase))
        {
            Console.WriteLine("\nUnexpected input text.\nThis application will now be terminated.\nPress ENTER to continue...");
            Console.ReadLine();
            Environment.Exit(0);
        }
        else
        {
            Console.WriteLine("You chose case " + userCase);
            Console.ReadLine();
        }

        Console.WriteLine("This case contains...\n$" + cashPrizeArrayR[userCase]);
        Console.ReadLine();

        Console.WriteLine("\nFor reference, below are the case numbers and their values: ");
        Console.ReadLine();
        var caseAndPrize = cashPrizeArrayR.Zip(caseArray, (p, c) => new { Prize = p, Case = c });
        foreach (var pc in caseAndPrize)
        {
            Console.WriteLine("Case " + pc.Case + " $" + (pc.Prize));
        }
        Console.ReadLine();
    }

Работает нормально, но выводит значение неправильно, как будтостолбец данных смещен вниз.Кто-нибудь может предложить решение, где я ошибся?Большое спасибо.

here

Ответы [ 2 ]

0 голосов
/ 23 ноября 2018

cashPrizeArrayR [userCase] ​​выбирает на основе индекса.Рассматривали ли вы вместо int [] использование KeyValuePair или словаря?

0 голосов
/ 23 ноября 2018

изменить эту строку:

Console.WriteLine("This case contains...\n$" + cashPrizeArrayR[userCase]);

на эту:

Console.WriteLine("This case contains...\n$" + cashPrizeArrayR[userCase - 1]);

дальнейшее предложение :

заменить это:

int userCase = int.Parse(Console.ReadLine());

с

bool validKey = int.TryParse(Console.ReadLine(), out var userCase);

if (!validKey|| !caseArray.Contains(userCase))
{ 
    // <snipped>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...