问题描述
我几天来一直在尝试解决此问题,但找不到错误。它看起来像一个if语句一样简单,以使代码显示除最后一个数字以外的所有逗号。它适合我放置随机数,但是当我放置特定数字(24,7,35,2,27,89)时,它会在最后打印逗号。
Print even numbers with commas
这是我的代码,但是我尝试了多种其他方式。
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]);
}
}
}
}
}
}
预先感谢:)
解决方法
此答案假设以上内容是家庭作业/教程,还有更有效的方式表示我在此处发布的内容
问题在于此段:
if (i < input.Length)
{
Console.Write(input[i] + comma);
}
问题 是,无论后面要做什么,您总是输出逗号。我认为最简单的方法是在逗号前添加逗号,这意味着,当您经历第二个循环时,如果您之前已经打印过一个数字,则可以在逗号前添加一个逗号并打印您拥有的数字(如果您已经之前没有打印任何数字(也就是说,您将要打印第一个数字),那么就不必在逗号前加上
。 ,您可以使用下面的代码,而不会使用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)));
,
您的其他条件将永远不会执行。如果您是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
,
i
总是小于循环条件的输入长度。
您可以让string.join
替您完成繁重的工作,而不是自己执行此操作:
string result = string.Join(comma,input.Where(i => i % 2 == 0));
Console.WriteLine(result);
,
又一个版本:
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() : "");