Как бы я заполнил этот размерный массив в C # циклом for?

#c#

#c#

Вопрос:

У меня есть жестко запрограммированный размерный массив, для которого я хотел бы создать цикл for, чтобы вставлялись рандомизированные символы.

А затем покажите это в консоли как 3 на 3 с foreach (это то, что я пробовал).:

a b c
d b a
a b d

Таким образом, я могу посчитать их, так как мне нужно создать систему указателей, поскольку у них есть определенные точки. (с этим я могу справиться самостоятельно) Но я застрял с размерным массивом. Он работал с массивом одного размера, но мне нужна игровая система 3 на 3.

 Random random = new Random();
String chars = "ABCD";

// the array i want to make a for loop for
string[,] main = new string[3, 3];

// the example array how it should look after the for loop inserted data.
string[,] main_example = new string[3, 3] { { "c", "b", "a" }, { "d", "a", "b" }, { "a", "d", "a" } 
};

// inserts a or b or c or d.
for (int i = 0; i < cards9.Length; i  ) {
    main[i, i]  = chars[random.Next(chars.Length)];
}

// the foreach to display the data in the console
foreach (string i in main) {
   System.Console.Write("{0} ", i);
}
 

Комментарии:

1. Большое вам всем спасибо, это действительно сработало как шарм 🙂 Мне нужно обновить код с помощью console.color и т. Д.

Ответ №1:

Просто используйте вложенный for цикл, GetLowerBound , и GetUpperBound :

 var array = new string[3, 3];

for (var i = array.GetLowerBound(0); i <= array.GetUpperBound(0); i  )
{
    for (var j = array.GetLowerBound(1); j <= array.GetUpperBound(1); j  )
    {
        // replace guids to your initialization code
        array[i, j] = Guid.NewGuid().ToString();
    }
}
 

Ответ №2:

Первая проблема заключается в том, что вы хотели бы иметь символы нижнего регистра, но ваш chars содержит только верхний регистр. Кроме того, вы хотите иметь массив символов, и мы знаем, что строка — это в основном она, но более понятным способом было бы использовать char[] .

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

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

Собрав все это вместе, я бы предложил внести такие изменения в код:

 private static char[,] GenerateRandomCharArray()
{
    var rnd = new Random();
    var chars = new char[] { 'a', 'b', 'c', 'd' };
    var charLength = chars.Length;
    var rows = 3;
    var columns = 3;
    var result = new char[rows, columns];
    for (int i = 0; i < rows; i  )
        for (int j = 0; j < columns; j  )
            result[i, j] = chars[rnd.Next(charLength)];
    
    return resu<
}
 

Ответ №3:

Одиночный цикл:

   for (int i = 0; i < cards9.Length; i  ) {
        var c = chars[random.Next(chars.Length)].ToString();
        main[i / 3, i % 3] = c;
    }
 

Приведенный выше код вычисляет все возможные индексы массива 3×3.

если выполнить печать с использованием приведенного ниже кода, то он будет распечатан следующим образом

    for (var i = main.GetLowerBound(0); i <= main.GetUpperBound(0); i  )
    {
        for (var j = main.GetLowerBound(1); j <=main.GetUpperBound(1); j  )
        {
            // replace guids to your initialization code
            Console.Write(main[i,j]   " ");
        }
        
        Console.WriteLine();
    }


B B D 
C C D 
A A C 
 

Вы можете проверить эту скрипку — https://dotnetfiddle.net/6vEu8f