【问题标题】:how to take user input and assign to array如何获取用户输入并分配给数组
【发布时间】:2015-05-16 22:43:10
【问题描述】:
假设用户输入了一行“1 2 3 4”,我如何将它分配给一个数组,使得array[0] 的值为 1,array[1] 的值为 2,依此类推?到目前为止,我只在用户在每个值之后按下回车键时才设法分配值,而不是当值在一行中时,这是我想要实现的。
double[,] array = new double[4,4];
Console.Write("Enter 16 digits: ");
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 4; j++)
{
array[i, j] = Convert.ToDouble(Console.ReadLine());
}
}
【问题讨论】:
标签:
c#
arrays
matrix
assign
【解决方案1】:
你要先分行:
string[] line = Console.ReadLine().Split(' ');
那么它是微不足道的
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 4; j++)
{
array[i, j] = double.Parse(line[i * 4 + j];
}
}
【解决方案2】:
你应该添加类似的东西
var line = Console.ReadLine();
var lineArray = line.Split(new Char[]{' '});
这将为您提供 lineArray 中单个字符串元素元素的数组,在 [0] 处带有“1”等。如果您想将其转换为双精度数组,您可以这样做
var arrayOfDouble = lineArray.ToList().ConvertAll(x => Double.Parse(x)).ToArray();
这里有一个解释:
拆分方法。这是一种可用于 String 对象的方法。它需要一串字符(我只有一个元素'',空格字符的数组)并在这些字符出现时拆分提供的字符串。它返回一个由拆分出来的项目组成的数组。
-
对 ConvertAll 的调用。
- 这需要一个函数,在这种情况下,在 lambda 中动态指定
表示法(即 x => Double.Parse(x) 位),它允许
根据需要指定一个函数。功能
对一个值 x 征税,并尝试将该值解析为 Double。由于 x
来自一个字符串数组,x的类型是String。呼吁
Parse 尝试从传递的字符串 x 中获取 Double。
- 因为 List 对象可以使用 ConvertAll(),所以我首先通过 ToList() 将数组转换为 List。 lambda 会在列表的每个元素上调用,因此原始 lineArray 中的每个字符串都将传递给 Double.Parse 以转换为双精度。将生成一个新的 Double 列表。
- 最后,我将生成的双精度列表重新设置为
通过 ToArray() 进行数组。