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&lt;= pnms.GetLength(0) - 1) @Idle_Mind 那是真的。我已经多次修改了这段代码,让它做我想做的事……,一件事导致了另一件事,结果出来了=) @FrankM 谢谢。我知道它最终什么也没做,但我需要保持对二维数组的 cols(0) 的“引用”。我会改的

以上是关于c# - 使用 for 循环打印相关行的二维数组的主要内容,如果未能解决你的问题,请参考以下文章

一个For循环打印二维数组

Java数组的使用

数组(二维)

在java中用二维数组构造并打印一个有N行的杨辉三角,N由命令行输入如一个有6行的杨辉三角

如何使用 for 循环将一维数组的值放入 C++ 中的二维数组

C语言,怎么利用一个循环遍历一个二维数组呀?急!!!