Member 12748447 Ответов: 2

Как мне сравнить массивы, чтобы получить результат в моей игре в бинго?


Привет, я новичок в программировании, и я так старался найти решение для сравнения двух массивов, но безуспешно. Я создал эту простую игру в бинго, и мне нужно сравнить номера бинго с номерами ввода пользователя. То, что я ищу, - это результат, который говорит, что вы получили 2 из 3 номеров Бинго. ты один номер из Бинго.

Мне запрещено использовать linq и contain () моим учителем, поэтому я должен решить его с помощью циклов.

Я был бы очень признателен за простой ответ, который объясняет педагогически, что было сделано, поскольку я действительно хочу научиться программированию :) Заранее спасибо, ребята.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace BINGO4
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("welcome to the big-win-bingo");
            Console.WriteLine("enter three numbers: ");
            int i;


            Random rand = new Random();
            int ran = rand.Next(1, 3);

            int[] GenerateBingo = new int[3];
            for (i = 0; i < GenerateBingo.Length; i++)
            {
                GenerateBingo[i] = rand.Next(1, 3);
            }
            foreach (int utskrift in GenerateBingo)
            {

            }


            int[] UserInput = new int[3];
            for (int j = 0; j < UserInput.Length; j++)
            {
                UserInput[j] = Convert.ToInt32(Console.ReadLine());
            }
            Console.WriteLine("\nYou got the following numbers: ");
            foreach (int SaveArrayInput in UserInput)
            {
                Console.Write(" " + SaveArrayInput);
            }
            Console.WriteLine("\n\nPreass any button to see results... ");
            Console.ReadKey();

            foreach (int a in GenerateBingo)//here's the trouble.
                foreach (int b in UserInput)
                {
                    if (a == b)
                        Console.WriteLine("Matching numbers is: {0} ", i);
            Console.ReadLine();
        }
    }
}


Что я уже пробовал:

foreach (int a in GenerateBingo)
                foreach (int b in UserInput)
                {
                    if (a == b)
                        Console.WriteLine("Matching numbers is: {0} ", i);
//and

for(int i = 0;i < array1.Length;i++)
          {
              string comp1 = array1[i];
              string comp2 = array2[i];
              if (comp1 == comp2)
              {
                 //Do something
              }
          }

[no name]

Просто сказать "вот в чем беда", не сказав нам, в чем беда, не поможет. Мы не умеем читать мысли.

Member 12748447

Я написал в описании, а не в коде. комментарий - это всего лишь отметка в коде, где массивы должны сравниваться. Мне нужна помощь в сравнении двух массивов, чтобы получить результат сравнения массивов UserInput и GenerateBingo. Результат должен пронумеровать количество правильных номеров Бинго против сгенерированных номеров Бинго.

[no name]

Да я понимаю, что. Помочь в чем? В чем проблема с вашим кодом?

BillWoodruff

Есть много вариантов игры, бинго, много определений того, что такое" победа".

Чтобы помочь вам, мне нужно знать ,каковы "правила" для вашей реализации.

Есть ли несколько игроков ? Используете ли вы довольно стандартную матрицу 5х5, где" центральный "квадрат считается "заполненным"?

Что именно должен иметь ваш игрок на своей карте, чтобы играть в Бинго ? Обычно выигрыш (Бинго) имеет, по крайней мере, завершение прямой линии (все элементы в одном столбце или одной строке). И расположение чисел в разных столбцах обычной карты должно быть в определенных диапазонах: каковы правила получения значений для каждой карты пользователя для каждой игры ?

2 Ответов

Рейтинг:
2

David_Wimbley

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

static void Main(string[] args)
        {
             Console.WriteLine("welcome to the big-win-bingo");
            Console.WriteLine("enter three numbers: ");
            int i;
 

            // Here you are getting a random number between 1 and 3...not very random but anyways
            Random rand = new Random();
            int ran = rand.Next(1, 3);
 
            int[] GenerateBingo = new int[3];
            // You've created an array of size 3 to store your generated bingo numbers.
            // For syntax reasons I strongly suggest you follow a standard code style convention and camel case your variable names
            // ex: generateBingo, althought I would say this is better names something like bingoNumbers.
            for (i = 0; i < GenerateBingo.Length; i++)
            {
                // Here you are getting the next random number between 1 and 3. Given this logic you are going to create a lot of bingo winners
                GenerateBingo[i] = rand.Next(1, 3);
            }
         

            // Same issue as before, camel case this variable
            int[] UserInput = new int[3];
            // Here you created an array of size 3 to capture a users input and convert it to int.
            for (int j = 0; j < UserInput.Length; j++)
            {
                // One thing to watch out here is if I type in A instead of an integer, this will explode.
                // If you don't know about try/catch blocks, now is a great time to learn. 
                // Also, look into Int32.TryParse 
                UserInput[j] = Convert.ToInt32(Console.ReadLine());
            }
            Console.WriteLine("\nYou got the following numbers: ");

            //Here you are just looping over UserInput and displaying what the person typed.
            foreach (int SaveArrayInput in UserInput)
            {
                Console.Write(" " + SaveArrayInput);
            }
            Console.WriteLine("\n\nPreass any button to see results... ");
            Console.ReadKey();


            // I think this is a no no for your teacher, I did this only so i can see what the generated bingo numbers were. Remove the string.join line.
            var bingonums = string.Join(",", GenerateBingo);
            Console.WriteLine("Bingo numbers are: " + bingonums);


            //So what i've done here is declare 2 variables, one tracks the number of matches found, the other tracks the 
            //  number of bingo numbers generated.
            var bingoCount = GenerateBingo.Length;
            var matchCount = 0;

            // Since you are matching bingo numbers to user input, I chose to loop over bingo first, I'm sure it could work by looping over
            //      the user input values first.
            foreach (var num in GenerateBingo)
            {
                // So the thing to note here is you want to loop over all user inputs within the bingo numbers in order to verify any numbers matched.
                //      This may create a false positive where if you have bingo numbers of 1, 2, 2...a user inputs 2. You could then have 2 matches out of 3 
                //      but I may not understand bingo correctly as it has been a long time.
                foreach (var input in UserInput)
                {
                    if (input == num)
                    {
                        Console.WriteLine("You got one of the bingo numbers " + input);
                        matchCount += 1;
                    }
                }
            }

            // Total bingo options - matches count shows number of options missed to acheieve bingo
            var missingMatchCount = bingoCount - matchCount;
            Console.WriteLine("You got {0} out of {1} matches, you are {2} number(s) away from bingo", matchCount, bingoCount, missingMatchCount);

            Console.ReadLine();
        }


Richard Deeming

"Глупо запрещать разработчику использовать легкодоступные инструменты ..."

Но довольно часто встречаются вопросы домашнего задания, где цель состоит в том, чтобы заставить ученика использовать определенный подход, относящийся к изучаемой теме. :)

David_Wimbley

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

Member 12748447

Спасибо, что нашли время все объяснить/прокомментировать. Я узнал из этого гораздо больше, чем из любого учебника, рассматриваемого с точки зрения времени. Я получил больше знаний о методе TryParse и булевых переменных. Я планировал добавить оператор a "try catch" в отдельный метод, который будет вызываться при каждом вызове пользовательского ввода.

Причина, по которой мои массивы малы и случайные числа имеют короткий диапазон, заключается в том, чтобы облегчить тестирование программы. В конце концов у меня будет одиннадцать чисел в обоих массивах.

David_Wimbley

Рад, что тебе это помогло. Пока вы учитесь, не зацикливайтесь на синтаксисе языка, а учитесь думать так, чтобы решать проблемы. Будь то разбиение большой проблемы на более мелкие части или анализ проблемы таким образом, чтобы вы могли ее решить. Если вы можете это сделать, изучение синтаксиса языка-самая легкая часть.

David_Wimbley

При изменении длины время выполнения увеличивается экспоненциально. Я слишком ленив, чтобы выяснить нотацию O времени выполнения, но в основном у вас есть 2 массива длиной 11 каждый.

Вы делаете цикл над первым массивом, чтобы сделать сравнение 11 раз против второго массива. Таким образом, он сделает 121 цикл, чтобы завершить сравнение.

Есть смысл?

Member 12748447

да, спасибо, что заставили его работать :)

Рейтинг:
0

Patrice T

попробуйте заменить

for(int i = 0;i < array1.Length;i++)
    {
        string comp1 = array1[i];
        string comp2 = array2[i];
        if (comp1 == comp2)
        {
           //Do something
        }
    }

около
for(int i = 0;i < array1.Length;i++)
    for(int j = 0;j < array2.Length;j++)
          {
              string comp1 = array1[i];
              string comp2 = array2[j];
              if (comp1 == comp2)
              {
                 //Do something
              }
          }