c# - 使用 for 循环打印相关行的二维数组
Posted
技术标签:
【中文标题】c# - 使用 for 循环打印相关行的二维数组【英文标题】:c# - 2d array printing relevant rows with a for loop 【发布时间】:2020-12-03 11:36:06 【问题描述】:我正在编写一个 C# 控制台应用程序。 “app”是一个糟糕的 mans 矩阵(1 和 0 落在页面下方)。
我不知道如何首先获得 1 行,然后是 2 行(第一行现在应该在 2cnd 位置)等等。
我得到的最接近的是二维数组中的下一行...
这仅打印当前行:
public static int col = 0;
static void PrintSingleLine()
for (int i = col; i <= pnms.GetLength(0) - 1;)
for (int j = 0; j <= pnms.GetLength(1) - 1; j++)
Console.Write(pnms[col, j]);
break;
col =+ 1;
我已经对其进行了修改,并试图让它打印出到目前为止 +1 已打印的所有行,但我无法让它工作......
public static int coll = 0;
static void PrintRelevantLines()
int cnt = 0;
for (int i = coll; i <= pnms.GetLength(0) - 1;)
for (int j = 0; j <= pnms.GetLength(1) - 1; j++)
for (int k = cnt; k <= coll; k++)
Console.Write(pnms[k, j]);
break;
coll = +1;
任何帮助将不胜感激。
谢谢
编辑 1:
根据要求,我会告诉你想要的结果。
假设我的数组有 3 行。值是这样的:
1 0 1 0 0 1 0 1 1 0 1 0 1 0 1 0 0 1 1 1 0 1
0 1 1 0 1 0 0 1 0 0 1 1 0 1 0 1 0 1 0 1 0 1
1 0 1 1 0 1 1 0 1 0 1 0 1 1 0 1 0 1 0 1 0 1
我想打印第一秒/或用户输入
(x) 1 0 1 0 0 1 0 1 1 0 1 0 1 0 1 0 0 1 1 1 0 1
要打印的第二个用户输入:
(y) 0 1 1 0 1 0 0 1 0 0 1 1 0 1 0 1 0 1 0 1 0 1
(x) 1 0 1 0 0 1 0 1 1 0 1 0 1 0 1 0 0 1 1 1 0 1
要打印的第三个用户输入:
(z) 1 0 1 1 0 1 1 0 1 0 1 0 1 1 0 1 0 1 0 1 0 1
(y) 0 1 1 0 1 0 0 1 0 0 1 1 0 1 0 1 0 1 0 1 0 1
(x) 1 0 1 0 0 1 0 1 1 0 1 0 1 0 1 0 0 1 1 1 0 1
感谢您指出不清楚的地方。当我提出这个问题时,我虽然很清楚:)
如果我可以提供任何其他信息,请告诉我
【问题讨论】:
可能缺少换行符,break;
看起来很奇怪,删除它
不,如果我删除break;
,它只会继续无限循环......如果有更多字符,那么缓冲区大小无论如何都应该写在下一行......
是否要按降序打印行?
这个不清楚,给我们看看输入和预期输出
编辑问题
【参考方案1】:
您使用 j、k、i 等让自己变得困难 - 您可以让整个事情变得更容易。我假设您正在处理一个二维字符串数组。这是一个更简单的版本(假设我已经正确理解了您的要求......)
static void PrintRelevantLines()
string [,] pnms = new string[3,5];
// Setup data
pnms[0, 0] = "1";
pnms[0, 1] = "0";
pnms[0, 2] = "1";
pnms[0, 3] = "0";
pnms[0, 4] = "1";
pnms[1, 0] = "0";
pnms[1, 1] = "1";
pnms[1, 2] = "0";
pnms[1, 3] = "1";
pnms[1, 4] = "0";
pnms[2, 0] = "1";
pnms[2, 1] = "1";
pnms[2, 2] = "1";
pnms[2, 3] = "0";
pnms[2, 4] = "0";
for (int columnIndex = 0; columnIndex <= pnms.GetLength(0) - 1; columnIndex ++)
for (int rowIndex = 0; rowIndex <= pnms.GetLength(1) - 1; rowIndex++)
Console.Write(pnms[columnIndex, rowIndex]);
Console.WriteLine(); // (if you wanted a matrix style trickle of lines, you'd probably want some sort of pause here....)
// OUTPUT
// 10101
// 01010
// 11100
【讨论】:
感谢您的回答。我已经想出了如何打印出所有的行。但我现在不知道如何打印第一行,下一秒的第 1 行和第 2 行,之后的第 1、2 和 3 行等(或用户输入或其他)【参考方案2】:好吧,我想通了。如果它可以帮助任何人......
public static int coll = 0;
static void PrintRelevantLines()
Console.Clear();
if (coll <= pnms.GetLength(0) - 1)
for (int k = 0; k <= coll; k++)
for (int j = 0; j <= pnms.GetLength(1) - 1; j++)
Console.Write(pnms[k, j]);
Console.WriteLine();
【讨论】:
仅供参考,您的变量命名可能会导致一些混乱。您的“k”变量通常称为 ROW,而“j”变量将是 COLUMN。想一想……您将“j”循环中的所有值一个接一个地打印在一行中……所以它们都是单行中的不同列。所以“coll”这个名字的使用有点混乱。 您的代码结构非常反直觉,外部 for 循环不是真正的循环,因为增量器 i 永远不会改变,并且在第一次运行后会中断。您应该将其替换为if(coll<= pnms.GetLength(0) - 1)
@Idle_Mind 那是真的。我已经多次修改了这段代码,让它做我想做的事……,一件事导致了另一件事,结果出来了=)
@FrankM 谢谢。我知道它最终什么也没做,但我需要保持对二维数组的 cols(0) 的“引用”。我会改的以上是关于c# - 使用 for 循环打印相关行的二维数组的主要内容,如果未能解决你的问题,请参考以下文章
在java中用二维数组构造并打印一个有N行的杨辉三角,N由命令行输入如一个有6行的杨辉三角