c# - 在控制台应用程序中使用数字和字母创建一个 16x26 的网格
问题描述
我正在尝试在控制台应用程序中创建一个 16x26 的网格,就像我在标题中所说的那样,但我什至无法将数字和字母放在正确的位置。然后我必须使用列和线将 unicode 字符像地图一样创建网格。它就像一个矩阵,在字母和数字内部是 unicode 字符。
有人可以帮助我吗,我是新手。
这就是我所做的:
static void Main(string[] args)
{
char y;
int x, letra;
for (int j = 0; j < 16; j++)
{
for (int i = 0; i < 26; i++)
{
if (j==0 && i==0 || i == 1)
{
Console.Write(" ");
}
else if(j==0 && i > 1)
{
letra = 65 + i;
y = Convert.ToChar(letra);
Console.Write(y + " ");
}
else if(i==0 && j > 1)
{
x = 1 + j;
Console.WriteLine(" ", x);
}
else if(j % 2 == 0 && j != 0 && i == 0)
{
Console.WriteLine(x + "");
}
}
}
}
解决方案
This little demo app may help you get where you're hoping to be:
static void Main(string[] args)
{
var numberOfRows = 16;
var numberOfCols = 26;
for (var currentRow = 0; currentRow < numberOfRows; currentRow++)
{
for (var currentCol = 0; currentCol < numberOfCols; currentCol++)
{
Console.Write(" ({0:00}, {1:00})", currentRow, currentCol); //for each column in the current row, output some data (in this case, the coordinates of this cell formatted " (row, col)"
}
Console.WriteLine(); //once we've completed a row, write a new line to move down to the next row
}
}
Example Output
(00, 00) (00, 01) (00, 02) (00, 03) (00, 04) (00, 05) (00, 06) (00, 07) (00, 08) (00, 09) (00, 10) (00, 11) (00, 12) (00, 13) (00, 14) (00, 15) (00, 16) (00, 17) (00, 18) (00, 19) (00, 20) (00, 21) (00, 22) (00, 23) (00, 24) (00, 25)
(01, 00) (01, 01) (01, 02) (01, 03) (01, 04) (01, 05) (01, 06) (01, 07) (01, 08) (01, 09) (01, 10) (01, 11) (01, 12) (01, 13) (01, 14) (01, 15) (01, 16) (01, 17) (01, 18) (01, 19) (01, 20) (01, 21) (01, 22) (01, 23) (01, 24) (01, 25)
(02, 00) (02, 01) (02, 02) (02, 03) (02, 04) (02, 05) (02, 06) (02, 07) (02, 08) (02, 09) (02, 10) (02, 11) (02, 12) (02, 13) (02, 14) (02, 15) (02, 16) (02, 17) (02, 18) (02, 19) (02, 20) (02, 21) (02, 22) (02, 23) (02, 24) (02, 25)
(03, 00) (03, 01) (03, 02) (03, 03) (03, 04) (03, 05) (03, 06) (03, 07) (03, 08) (03, 09) (03, 10) (03, 11) (03, 12) (03, 13) (03, 14) (03, 15) (03, 16) (03, 17) (03, 18) (03, 19) (03, 20) (03, 21) (03, 22) (03, 23) (03, 24) (03, 25)
(04, 00) (04, 01) (04, 02) (04, 03) (04, 04) (04, 05) (04, 06) (04, 07) (04, 08) (04, 09) (04, 10) (04, 11) (04, 12) (04, 13) (04, 14) (04, 15) (04, 16) (04, 17) (04, 18) (04, 19) (04, 20) (04, 21) (04, 22) (04, 23) (04, 24) (04, 25)
(05, 00) (05, 01) (05, 02) (05, 03) (05, 04) (05, 05) (05, 06) (05, 07) (05, 08) (05, 09) (05, 10) (05, 11) (05, 12) (05, 13) (05, 14) (05, 15) (05, 16) (05, 17) (05, 18) (05, 19) (05, 20) (05, 21) (05, 22) (05, 23) (05, 24) (05, 25)
(06, 00) (06, 01) (06, 02) (06, 03) (06, 04) (06, 05) (06, 06) (06, 07) (06, 08) (06, 09) (06, 10) (06, 11) (06, 12) (06, 13) (06, 14) (06, 15) (06, 16) (06, 17) (06, 18) (06, 19) (06, 20) (06, 21) (06, 22) (06, 23) (06, 24) (06, 25)
(07, 00) (07, 01) (07, 02) (07, 03) (07, 04) (07, 05) (07, 06) (07, 07) (07, 08) (07, 09) (07, 10) (07, 11) (07, 12) (07, 13) (07, 14) (07, 15) (07, 16) (07, 17) (07, 18) (07, 19) (07, 20) (07, 21) (07, 22) (07, 23) (07, 24) (07, 25)
(08, 00) (08, 01) (08, 02) (08, 03) (08, 04) (08, 05) (08, 06) (08, 07) (08, 08) (08, 09) (08, 10) (08, 11) (08, 12) (08, 13) (08, 14) (08, 15) (08, 16) (08, 17) (08, 18) (08, 19) (08, 20) (08, 21) (08, 22) (08, 23) (08, 24) (08, 25)
(09, 00) (09, 01) (09, 02) (09, 03) (09, 04) (09, 05) (09, 06) (09, 07) (09, 08) (09, 09) (09, 10) (09, 11) (09, 12) (09, 13) (09, 14) (09, 15) (09, 16) (09, 17) (09, 18) (09, 19) (09, 20) (09, 21) (09, 22) (09, 23) (09, 24) (09, 25)
(10, 00) (10, 01) (10, 02) (10, 03) (10, 04) (10, 05) (10, 06) (10, 07) (10, 08) (10, 09) (10, 10) (10, 11) (10, 12) (10, 13) (10, 14) (10, 15) (10, 16) (10, 17) (10, 18) (10, 19) (10, 20) (10, 21) (10, 22) (10, 23) (10, 24) (10, 25)
(11, 00) (11, 01) (11, 02) (11, 03) (11, 04) (11, 05) (11, 06) (11, 07) (11, 08) (11, 09) (11, 10) (11, 11) (11, 12) (11, 13) (11, 14) (11, 15) (11, 16) (11, 17) (11, 18) (11, 19) (11, 20) (11, 21) (11, 22) (11, 23) (11, 24) (11, 25)
(12, 00) (12, 01) (12, 02) (12, 03) (12, 04) (12, 05) (12, 06) (12, 07) (12, 08) (12, 09) (12, 10) (12, 11) (12, 12) (12, 13) (12, 14) (12, 15) (12, 16) (12, 17) (12, 18) (12, 19) (12, 20) (12, 21) (12, 22) (12, 23) (12, 24) (12, 25)
(13, 00) (13, 01) (13, 02) (13, 03) (13, 04) (13, 05) (13, 06) (13, 07) (13, 08) (13, 09) (13, 10) (13, 11) (13, 12) (13, 13) (13, 14) (13, 15) (13, 16) (13, 17) (13, 18) (13, 19) (13, 20) (13, 21) (13, 22) (13, 23) (13, 24) (13, 25)
(14, 00) (14, 01) (14, 02) (14, 03) (14, 04) (14, 05) (14, 06) (14, 07) (14, 08) (14, 09) (14, 10) (14, 11) (14, 12) (14, 13) (14, 14) (14, 15) (14, 16) (14, 17) (14, 18) (14, 19) (14, 20) (14, 21) (14, 22) (14, 23) (14, 24) (14, 25)
(15, 00) (15, 01) (15, 02) (15, 03) (15, 04) (15, 05) (15, 06) (15, 07) (15, 08) (15, 09) (15, 10) (15, 11) (15, 12) (15, 13) (15, 14) (15, 15) (15, 16) (15, 17) (15, 18) (15, 19) (15, 20) (15, 21) (15, 22) (15, 23) (15, 24) (15, 25)
ps. Per ADyson's comment, if you first create an array then wanted to loop through the contents you'd only tweak the approach to output data slightly / like so:
void Main()
{
var data = new char[,] {{'A','B','C'}, {'D','E','F'}};
for(var row=0; row<data.GetLength(0); row++)
{
for(var col=0; col<data.GetLength(1); col++)
{
Console.Write(data[row,col]);
}
Console.WriteLine();
}
}
And you could populate the 2D array with code such as we'd used in the original post, only assigning to the array like so:
static void Main(string[] args)
{
var numberOfRows = 16;
var numberOfCols = 26;
var data = new char[numberOfRows, numberOfCols];
for (var currentRow = 0; currentRow < numberOfRows; currentRow++)
{
for (var currentCol = 0; currentCol < numberOfCols; currentCol++)
{
data[currentRow, currentCol] = Convert.ToChar(65 + currentCol);
}
}
}
Another option would be to use IEnumerable collections with lambda expressions and foreach loops like so:
void Main()
{
//populate
var data = Enumerable.Range(1,16).Select(x =>
Enumerable.Range(1,26).Select(y =>
Convert.ToChar(64 + y)
)
);
//output one way
Console.WriteLine("\r\nMethod 1\r\n");
foreach(var row in data)
{
foreach(var cell in row)
{
Console.Write(cell);
}
Console.WriteLine();
}
//or another
Console.WriteLine("\r\nMethod 2\r\n");
data.ToList().ForEach(row => {
row.ToList().ForEach(cell =>
Console.Write(cell)
);
Console.WriteLine();
});
//or another approach convert each row from a collection of chars to strings separated by spaces, then join all the strings(rows) to one string separated by line breaks
Console.WriteLine("\r\nMethod 3\r\n");
var output = string.Join("\r\n", data.Select(row =>
string.Join(" ", row.Select(cell =>
cell.ToString()
))
));
Console.WriteLine(output);
}
Hopefully some of these techniques help to give you some ideas. If you need any explanations or have any issues implementing these for your scenario, please say in the comments and I'll provide additional help as needed.
NB: A good approach when tackling any issue is to break it down into steps, so if you're looking to draw a grid around your data, rather than having one method to do all the work, create different functions for each piece you're looking to achieve; i.e. one to format each row as you want it, another to put those rows into a table, etc.
Here's an example: https://dotnetfiddle.net/Tb0zkV
void Main()
{
//populate
var data = Enumerable.Range(1,16).Select(x =>
Enumerable.Range(1,26).Select(y =>
Convert.ToChar(64 + y)
)
);
//display
Console.WriteLine(data.ToTableFormatString());
}
public static class TableCreationExtension
{
//converts the output of ToTableFormat to a single string
public static string ToTableFormatString(this IEnumerable<IEnumerable<char>> rows) =>
string.Join("\r\n", rows.ToTableFormat());
/*
calls other methods to convert the data to the inner table format, then surrounds with a double edged box
╔═════╗
║inner║
║table║
║goes ║
║here ║
╚═════╝
info on required characters here: https://en.wikipedia.org/wiki/Box-drawing_character
*/
public static IEnumerable<string> ToTableFormat(this IEnumerable<IEnumerable<char>> rows)
{
var rowsAsStrings = rows.ToInnerTableFormat();
var rowLength = rowsAsStrings.First().Length; //assume that all rows are the same length, so the length of the first equals the length of all others
//first row of box
yield return string.Format("╔{0}╗", new string('═', rowLength));
//each row within the box
foreach(var row in rowsAsStrings)
{
yield return string.Format("║{0}║", row);
}
//last row of box
yield return string.Format("╚{0}╝", new string('═', rowLength));
}
/*
calls other methods to convert each row into a formatted string
Adds a separator between each row.
each
---------
row
---------
separated
*/
public static IEnumerable<string> ToInnerTableFormat(this IEnumerable<IEnumerable<char>> rows)
{
bool returnInnerLine = false;
int rowLength = 0; //assume all rows are the same length
foreach(var row in rows)
{
var formattedRow = row.ToFormattedRow();
if (returnInnerLine)
{
yield return new string('-', rowLength); //returns a line of -s the same length as a row for a between-row separator
}
else
{
returnInnerLine = true;
rowLength = formattedRow.Length;
}
yield return formattedRow;
}
}
//converts `'A', 'B', 'C'` to "A|B|C"
public static string ToFormattedRow(this IEnumerable<char> cellsInRow) =>
string.Join("|", cellsInRow.Select(c => c.ToString()));
}
Output
+---------------------------------------------------+
¦A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z¦
¦---------------------------------------------------¦
¦A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z¦
¦---------------------------------------------------¦
¦A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z¦
¦---------------------------------------------------¦
¦A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z¦
¦---------------------------------------------------¦
¦A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z¦
¦---------------------------------------------------¦
¦A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z¦
¦---------------------------------------------------¦
¦A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z¦
¦---------------------------------------------------¦
¦A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z¦
¦---------------------------------------------------¦
¦A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z¦
¦---------------------------------------------------¦
¦A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z¦
¦---------------------------------------------------¦
¦A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z¦
¦---------------------------------------------------¦
¦A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z¦
¦---------------------------------------------------¦
¦A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z¦
¦---------------------------------------------------¦
¦A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z¦
¦---------------------------------------------------¦
¦A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z¦
¦---------------------------------------------------¦
¦A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z¦
+---------------------------------------------------+
推荐阅读
- c++ - 我如何使这个Foo循环在这个问题中起作用?
- excel - 使用 fso 在 vba 中查找字符串并提取
- wordpress - 在产品图片 WooCommerce 下方放置文本
- reactjs - 从父级反应访问子变量
- php - 此路由不支持 PUT 方法。支持的方法:GET、HEAD、POST、DELETE。(注意我使用的是模型投标)
- c# - 在 .NET Core 3.0 中使用 TypeConverterAttribute 时加载 System.ObjectModel 的问题
- r - 循环模拟内的子集数据
- c# - 如何列出文本文件扩展名
- express - 如何使用 axios 将文件上传到使用 graphql-upload 实现的 graphql 后端?
- reactjs - React Uncaught Invariant Violation:在 ApolloConsumer 的上下文中找不到“客户端”。将根组件包装在一个