#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