c# - 使用 Console.ReadLine().Split() 在循环中填充字符串数组
问题描述
我有以下非常基本的代码:
静态无效主要(字符串 [] 参数) { int n = Convert.ToInt32(Console.ReadLine()); for (int i = 0; i < n*3; i++) { 字符串[] 数字 = Console.ReadLine().Split(); Console.WriteLine(); Console.WriteLine(数字[i]); } }
它应该采用以下数据:
3
11 9 1
14 90 232
111 15 111
它使用第一个数字来确定它们的数据行数(这是有原因的,但超出了这个问题的范围。
循环应该采用第 2、3 和 4 行并填充 numbers 数组,拆分数据向上所以 numbers[0] = 11, numbers[1] = 9, numbers[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#。
解决方案
让我们一步一步来:
- 你输入 3 所以
n = 3
for 循环中的代码将运行 3 * 3 = 9 次。 - 你
11 9 1
这样输入string[] numbers = { "11", "9", "1" };
。 - 然后它将打印一个空行。
- 从
i = 0
现在开始,它将打印numbers[0]
哪个是"11"
(它将打印11
)。
此时的输出如下:
3
11 9 1
11
- 你进入
14 90 232
,所以string numbers = { "14", "90", "232" };
。 - 空行
- 现在这是我们第二次通过循环和
i = 1
. 所以它会打印numbers[1]
哪个是"90"
.
此时的输出如下:
3
11 9 1
11
14 90 232
90
- 你进入
111 15 111
,所以string numbers = { "111", "15", "111" };
。 - 空行
- 现在这是我们第三次通过循环和
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()来获得您的预期结果。
以下是解决方案:
静态无效主要(字符串 [] 参数) { int n = Convert.ToInt32(Console.ReadLine()); for (int i = 0; i < n*3; i++) { 字符串[] 数字 = Console.ReadLine().Split(); Console.WriteLine(); Console.WriteLine(string.Join(" ", numbers)); } }
推荐阅读
- python - 无法运行 spyder(需要 pyQT5 5.5+)
- visual-studio-code - 以编程方式获取 VS Code 工作区中所有符号的列表以进行自定义扩展
- c# - 从异步方法返回任务以外的对象
- python - SQLAlchemy:设计具有唯一性约束的多对多关系
- amazon-web-services - 将用户从当前的认知池迁移到新的认知池?
- python - 提示:没有函数匹配给定的名称和参数类型。您可能需要添加显式类型转换。TrigramSimilarity Django
- javascript - Service Worker 离线时是否会抛出未找到文件的错误?
- laravel - 在 Laravel 中使用变量设置动态关键字元
- c# - 如何传播对象引用更改?
- android - Robolectric RuntimeEnvironment.application 已弃用,ApplicationProvider.getApplicationContext() 在哪里?