Как сохранить результаты матрицы массива в меньший массив c# - PullRequest
0 голосов
/ 20 февраля 2020

Мне нужно добавить значение, которое будет либо p1 (выплата один), либо p2 (выплата два) для окружающих четырех соседей значения в матрице, которое затем будет напечатано в новую матрицу массива. Если это 1, тогда p1 нужно будет добавить к его соседям или, если его 0, тогда p2 будет добавлено к его соседям. Я пытался сделать этот подход с вложенным для l oop, но мое утверждение «если» в моем для l oop дает мне ошибки, и я не уверен, куда дальше go с ним.

  class MainClass
{
    static void Main(string[] args)
    {
        int m, n, i, j, p1, p2;

        // rows and columns of the matrix+
        m = 3;
        n = 3;

        //Payoff matrix
        p1 = 10; //cheat payoff matrix
        p2 = 5; //co-op payoff matrix




        int[,] arr = new int[3, 3];


        Console.Write("To enter 1 it means to co-operate" );
        Console.Write("To enter 0 it means to cheat");

        Console.Write("Enter elements of the Matrix: ");
        for (i = 0; i < m; i++)
        {
            for (j = 0; j < n; j++)
            {
                arr[i, j] = Convert.ToInt16(Console.ReadLine());

            }
        }






        Console.WriteLine("Printing Matrix: ");
        for (i = 0; i < m; i++)
        {
            for (j = 0; j < n; j++)
            {
                Console.Write(arr[i, j] + "\t");
            }
            Console.WriteLine();
        }




        // how to change the values of the matrix

        int[] payoffMatrix = new int[4];

        for (i = 0; i < m; i++)
        {
            for (j = 0; j < n; j++)
            {
                if(arr[i,j] == 1)
                {
                    arr[i, j] = arr[i - 1, j] , arr[i + 1, j] , arr[i, j - 1] , arr[i, j + 1];
                }

            }
            Console.WriteLine();
        }

Результат соседних значений должен быть напечатан в матрице выплат, а также

1 Ответ

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

Если я правильно понял, сначала нужно сделать копию вашего массива. Потому что в противном случае вы могли бы прочитать, например, «1» из позиции массива (i + 1) из текущей итерации. Это, вероятно, не то, что вы хотите. Затем вы просто устанавливаете желаемые значения в вашем for-l oop. Вам нужна некоторая проверка границ, потому что, например, arrNew [i - 1] будет доступен только если i> 0

, это дает вам что-то вроде:

        int[,] arrNew = arr.Clone() as int[,]; //creates a copy of arr

        for (i = 0; i < m; i++)
        {
            for (j = 0; j < n; j++)
            {
                if (arr[i, j] == 1)
                {
                    if (i > 0) //bounds checking
                    {
                        arrNew[i - 1, j] = 1;
                    }

                    if (i < m - 1) //bounds checking
                    {
                        arrNew[i + 1, j] = 1;
                    }

                    if (j > 0) //bounds checking
                    {
                        arrNew[i, j - 1] = 1;
                    }

                    if (j < n - 1) //bounds checking
                    {
                        arrNew[i, j + 1] = 1;
                    }

                }

            }
        }

Для матрицы:

0 0 0
0 1 0
0 0 0

результат будет

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