我已经尝试解决这个问题好几天了,但找不到错误。对于代码来说,除了最后一个数字之外,打印所有数字的逗号似乎就像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() : "");