用逗号打印偶数,除了C#中的最后一个不起作用



我已经尝试解决这个问题好几天了,但找不到错误。对于代码来说,除了最后一个数字之外,打印所有数字的逗号似乎就像if语句一样简单。它对我放随机数很有效,但当我放特定的数字(24,7,35,2,27,7,89(时,它会在末尾打印逗号。

用逗号打印偶数

这是我的代码,但我尝试了多种其他方法。

using System.Collections.Generic;
using System.Text;
using System.Transactions;
namespace ArrayExercises
{
class TaskFour
{
public static void FindEvenNumbers()
{
int[] input = new int[7];
int count = 1;
string comma = ",";
Console.WriteLine("[== Please Enter 7 numbers ==]");
Console.WriteLine();
for (int i = 0; i < input.Length; i++)
{
Console.WriteLine($"Enter number {count}:");
input[i] = int.Parse(Console.ReadLine());              
count++;
}
Console.WriteLine("The even numbers in this array are: ");
for (int i = 0; i < input.Length; i++)
{

if (input[i] % 2 == 0) 
{
if (i < input.Length)
{
Console.Write(input[i] + comma);
}
else
{
Console.Write(input[i]);
}
}
}
}
}
}

提前感谢:(

您可以使用以下代码,而无需使用for循环引入任何额外空间。

for (int i = 0; i < input.Length; i++)
{
if (input[i] % 2 == 0)
{
if (i != 0) Console.Write(comma);
Console.Write(input[i]);

}
}

或者使用内置的string.Join功能。

Console.WriteLine(string.Join(',', input.Where(i => i % 2 == 0)));

这个答案假设以上是家庭作业/教程,有更有效的方法意味着我在这里发布的内容

问题出在这个环节:

if (i < input.Length)
{
Console.Write(input[i] + comma);
}

的问题是,无论后面是什么,您总是输出逗号。我认为最简单的方法是在前面加上逗号,这意味着,当你进行第二个循环时,如果你以前已经打印过一个数字,你可以预挂一个逗号并打印出你的数字,如果你之前没有打印任何数字(也就是说,你即将打印第一个数字(,那么你就不必预挂逗号。

由于循环的条件,

i将始终小于输入的长度。

您可以让string.join为您完成繁重的工作,而不是自己实现这一点:

string result = string.Join(comma, input.Where(i => i % 2 == 0));
Console.WriteLine(result);

您的else条件永远不会执行。如果你是C#的新手,那么我建议你先获取所有偶数,并将其存储在列表中。重复使用逗号打印,跳过最后一个逗号。

//Your existing source code
List<int> evenNumber = new List<int>();
for (int i = 0; i < input.Length; i++)
{
if (input[i] % 2 == 0) 
{
evenNumber.Add(input[i]);
}
}
for(int i = 0; i < evenNumber.Length; i++)
{
//Print just number if it is last, otherwise print number with comma
if(i == evenNumber.Length - 1)
Console.Write(evenNumber[i]);
else
Console.Write(evenNumber[i]+comma);
}

如果您知道string.Join(),则使用linq获取偶数列表,并使用","作为分隔符打印偶数列表

var evenNumbers = input.Where(x => x % 2 ==0);  //Filter all even numbers
Console.WriteLine(string.Join(",", evenNumbers);  //Print using string.Join

另一个版本:

string result = "";
for (int i = 0; i < input.Length; i++)
{
if (input[i] % 2 == 0) 
{
result += $",{input[i]}";
}
}
Console.WriteLine( result.Length > 0 ? result.Substring(1).ToString() : "");

最新更新