使用 Console.ReadLine().Split() 循环填充字符串数组

Using Console.ReadLine().Split() to fill a string array in a loop

我有以下非常基本的代码:

static void Main(string[] args)
{
    int n = Convert.ToInt32(Console.ReadLine());

    for (int i = 0; i < n*3; i++)
    {
        string[] numbers = Console.ReadLine().Split();
        Console.WriteLine();
        Console.WriteLine(numbers[i]);
    }
}

它应该采用以下数据:

3  
11 9 1  
14 90 232  
111 15 111  

它用第一个数字来确定它们的数据行数(这是有原因的,但超出了这个问题的范围。
循环应采用第 2、3 和 4 行并填充数字数组,将数据拆分为数字[0] = 11、数字[1] = 9、数字[2] = 1 ...,依此类推。 我所看到的是它将行中的第一个数字放入数组中并继续前进。这是它当前正在做的事情的预览:

3  
11 9 1

11  
14 90 232

90  
111 15 111

我希望输出是:

3  
11 9 1

11 9 1  
14 90 232

14 90 232  
111 15 111

111 15 111

我可能正在做一些完全愚蠢且显而易见的事情,但我仍在努力学习 C#。

正如我所见,你的数字数组在循环内,所以每次循环进行迭代时,数组都会重新初始化,所以是的 - 你的程序确实将所有数字放在数组中但只打印 ith 元素,即使它运行 9 次,它也会初始化数组 9 次(虽然这是一件大事)。下面是您的代码的更简单和更容易的。

static void Main(string[] args)
{
    int n = Convert.ToInt32(Console.ReadLine());
    string numbers[3];

    // read n lines, one by one
    for (int i = 0; i < n; i++)
    {
        numbers = Console.ReadLine().Split();
        Console.WriteLine();

        // print the 3 numbers, either using a smaller loop or simply indexing        
        // I use a loop here to make it more dynamic

        for (int j = 0; j < 3; j++) {
            Console.WriteLine(numbers[j] + " ");
        }
    }
}

尽管我不完全理解您的预期输出。是否要再次显示最后打印的行?如果是,您可以在将新数字读入之前简单地打印数字数组(确保它不为空,使用布尔标志或其他东西)。

一步步来:

  1. 你输入 3 所以 n = 3 并且 for 循环中的代码将 运行 3 * 3 = 9 次。
  2. 你输入 11 9 1 所以 string[] numbers = { "11", "9", "1" };.
  3. 然后它会打印一个空行。
  4. i = 0 开始,它将打印 numbers[0]"11"(它将打印 11)。

此时输出如下:

3
11 9 1

11
  1. 你输入14 90 232,所以string numbers = { "14", "90", "232" };
  2. 空行
  3. 现在是我们第二次进行循环 i = 1。所以它会打印 numbers[1]"90".

此时输出如下:

3
11 9 1

11
14 90 232

90
  1. 你输入111 15 111,所以string numbers = { "111", "15", "111" };
  2. 空行
  3. 现在是我们第三次进行循环 i = 2。所以它会打印 numbers[2]"111".

此时输出如下:

3
11 9 1

11
14 90 232

90
111 15 111

111

如果您输入包含三个数字的 1 2 3 之类的内容,您将遇到错误,因为这将是我们第四次进行循环和 i = 3,因为 numbers包含三个元素你会看到如下:

System.IndexOutOfRangeException: 'Index was outside the bounds of the array.'

我推荐 string.Join() 以获得您预期的结果。

解决方法如下:

static void Main(string[] args)
{
    int n = Convert.ToInt32(Console.ReadLine());

    for (int i = 0; i < n*3; i++)
    {
        string[] numbers = Console.ReadLine().Split();
        Console.WriteLine();
        Console.WriteLine(string.Join(" ", numbers));
    }
}