我的输入是一串整数,我必须检查它们是否为偶数,并在控制台上显示它们(如果是)。问题是我写的内容只检查单个数字,而不检查数字。
string even = "";
while (true)
{
string inputData = Console.ReadLine();
if (inputData.Equals("x", StringComparison.OrdinalIgnoreCase))
{
break;
}
for (int i = 0; i < inputData.Length; i++)
{
if (inputData[i] % 2 == 0)
{
even +=inputData[i];
}
}
}
foreach (var e in even)
Console.WriteLine(e);
bool something = string.IsNullOrEmpty(even);
if( something == true)
{
Console.WriteLine("N/A");
}
例如,如果输入为: 12 34 56 我的输出将是 2 4 6(每个数字都需要在新行上显示)。 我究竟做错了什么?任何帮助表示赞赏。
答案 0 :(得分:2)
使用string.Split
获取独立部分,然后使用int.TryParse
检查它是否为数字(选中Parse v. TryParse)。然后只取偶数:
var evenNumbers = new List<int>();
foreach(var s in inputData.Split(" "))
{
if(int.TryParse(s, out var num) && num % 2 == 0)
evenNumbers.Add(num); // If can't use collections: Console.WriteLine(num);
}
(注意使用out vars introduced in C# 7.0)
如果可以使用linq,则类似于this answer:
var evenNumbers = inputData.Split(" ")
.Select(s => (int.TryParse(s, out var value), value))
.Where(pair => pair.Item1)
.Select(pair => pair.value);
答案 1 :(得分:1)
我认为您一次在这里做太多事情。与其先检查数字是否为偶数,不如一次解决一个问题。
首先,我们可以通过将字符串分成“单词”来制作子字符串。净我们将每个子字符串转换为int
,最后我们对偶数进行过滤,例如:
var words = inputData.Split(' '); # split the words by a space
var intwords = words.Select(int.Parse); # convert these to ints
var evenwords = intwords.Where(x => x % 2 == 0); # check if these are even
foreach(var even in evenwords) { # print the even numbers
Console.WriteLine(even);
}
在这里仍然可能会出现某些“单词”不是整数的情况,例如"12 foo 34"
。因此,您将需要在拆分和转换之间实施一些额外的过滤。