以相反的顺序显示二维数组的行
Posted
技术标签:
【中文标题】以相反的顺序显示二维数组的行【英文标题】:Display rows of a 2d array in reverse order 【发布时间】:2020-12-06 23:50:06 【问题描述】:我正在开发一个“穷人矩阵”的应用程序,即。 1 和 0 从屏幕上掉下来。
到目前为止,我已经设法让二维数组在第一个用户输入上显示一行,在第二个用户输入上显示 2 行,在第三个用户输入上显示 3 行等。
问题是,第一行总是停留在顶部,我无法获得“下拉”效果。它总是在用户输入的前一行/行的下方附加一行 1 和 0。
示例 - 到目前为止它是如何工作的:
我的二维数组:
1 0 1 0 1 1 1 (1st row)
0 1 0 1 0 1 0 (2nd row)
0 0 1 0 1 0 1 (3rd row)
1 0 0 1 0 1 0 (4th row)
第一个用户输入 (Console.ReadKey();
):
1 0 1 0 1 1 1 (1st row)
2cnd 用户输入 (Console.ReadKey();
):
1 0 1 0 1 1 1 (1st row)
0 1 0 1 0 1 0 (2nd row)
第三个用户输入:
1 0 1 0 1 1 1 (1st row)
0 1 0 1 0 1 0 (2nd row)
0 0 1 0 1 0 1 (3rd row)
等等
我想要实现的是类似但“相反”的顺序。
示例 - 我想要达到的目标:
第一个用户输入:
1 0 1 0 1 1 1 (1st row)
2cnd 用户输入:
0 1 0 1 0 1 0 (2nd row)
1 0 1 0 1 1 1 (1st row)
第三个用户输入:
0 0 1 0 1 0 1 (3rd row)
0 1 0 1 0 1 0 (2nd row)
1 0 1 0 1 1 1 (1st row)
所以,总结一下,我想修改我现有的代码,以便总是最后添加第一行。或者可能从数组的末尾开始读取 - 最后一行。我已经尝试过了,但我经常收到outOfRange
错误...
欢迎任何帮助。
仅在现有行下方添加额外行的代码:
public static int row = 0;
static void PrintRelevantLines()
Console.Clear();
if (rowl <= pnms.GetLength(0) - 1)
for (int i = 0; i <= row; i++)
for (int j = 0; j <= pnms.GetLength(1) - 1; j++)
Console.Write(pnms[i, j]);
Console.WriteLine();
row += 1;
编辑:我要求的答案是
for (int i = row; i >= 0; i--;)
提供者:Pranav Hosangadi
但我接受了 Caius Jard 的回答,因为他超出了我的要求。
谢谢。
【问题讨论】:
你的意思是“在下面添加列...”列是垂直的东西。列下方的任何内容都是..同一列 请看例子。我添加了 1st、2cnd、3rd 等以进行澄清 仅供参考,看来你所说的列,世界其他地方都称为行。如果您愿意,您可以继续将其称为专栏,但对于您寻求帮助的人来说,这将是一个永久困惑的根源 反向迭代有什么问题?for (int i = rowl; i >= 0; i--)
?
@PranavHosangadi 我不断收到outOfRange
错误。我再试一次
【参考方案1】:
给你;这是矩阵效应:
int width = 60; //draw 60 columns
int height = 20; //draw 20 rows
var chars = "1234567890-=qwertyuiop[]asdfghjkl;'#zxcvbnm,./!\"£$%^&*()_+QWERTYUIOPASDFGHJKL:@~ZXCVBNM<>?".ToCharArray(); //create an array of chars to randomly choose and pump onto screen
var r = new Random(); //make only one Random. Never make a Random in a loop
while (true) //forever
int randCol = r.Next(0, width); //pick which column we will draw now
for (int i = 0; i < height; i++) //for every row from top to bottom
Console.SetCursorPosition(randCol, i); //put the cursor there
Console.Write(chars[r.Next(chars.Length)]); //pump a random char
Thread.Sleep(200); //it's a bit fast otherwise
我还没有完全给出你的练习的解决方案,因为它看起来像一个家庭作业(而且我不做家庭作业),但我希望你能逐步完成它并看看它是如何工作的,并做出您需要对程序进行调整以获得您所追求的结果
也许,例如,您可以将行保存在 2D 缓冲区中,并且可以随机决定列(就像我所做的那样),并且可以通过向下读取列(或向上),写入屏幕,与您从缓冲区中选择的列相同,然后选择另一列
也许您可以定期将行插入缓冲区(通过它滚动新数据)。
也许你也可以先把字符写成白色,然后在你用白色写新字符之前用灰色覆盖它(当屏幕填满时很难看到效果)
然后你可以同时写多个不同偏移量的字符..
..然后你可以把它交给 codegolf.se.com 的窥视者,他们会给你写一个版本,比如 15 个字符的 05AB1E 之类的东西
【讨论】:
谢谢。试了一下,看起来很棒。我想我将不得不再次观看矩阵 =) 我会研究它是如何工作的。到目前为止,我给了你一个+1。我将等待 Pranav 回答这个问题,因为他的代码实际上解决了我的问题。如果他在一天左右没有发布 anwser,我会接受你的。 我不知道 05ABE 应该是什么意思 这真的回答了这个问题吗?因为这些行没有按照 OP 要求的方式打印 - 它们仍然从上到下打印,新数字出现在列的底部,而不是好像它们“下降”,每个数字向下移动一行该列已填满。 编辑了我的问题,也为问题提供了答案。由于没有其他 anwser 并且 OP 超出了我的要求,我接受了这个 anwser。 好的,这只是一个小时,但没问题。如果解决了,我就不管了!以上是关于以相反的顺序显示二维数组的行的主要内容,如果未能解决你的问题,请参考以下文章