我有以下非常基本的代码:
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
它取第一个数字来确定它们的数据行数(这是有原因的,但超出了这个问题的范围。br>循环应该取第2,3和4行并填充数字数组,将数据拆分为numbers0]=11,numbers1]=9,numbers2]=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#。
让我们一步一步走:
此时输出如下:
3
11 9 1
11
此时输出如下:
3
11 9 1
11
14 90 232
90
此时输出如下:
3
11 9 1
11
14 90 232
90
111 15 111
111
如果您输入包含三个数字的
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)); } }
正如我所看到的,你的数字数组在循环中,所以每次循环进行迭代,数组都会被重新初始化,所以是的,你的程序确实把所有的数字放到数组中,但是只打印第i个元素,即使它运行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] + " ");
}
}
}
但我并不完全理解您的预期输出。是否再次显示最后打印的行?如果是,您可以在读取新数字之前简单地打印数字数组(确保它不是空的,使用布尔标志或其他什么)。