这是问题的其余部分。返回一个由从1到n的数字的字符串表示组成的数组,但有一个扭曲!!对于3的倍数,返回字符串"代替数字,对于5的倍数返回字符串"Sandstorm";对于3和5的倍数,返回字符串"Darude StandStorm">
这是我的代码
static string [] stringarray(int n)
{
string [] results= { } ;
for (int i = 1; i <= n; i++)
{
if (i % 3 == 0) results = new[] { "Deude" };`enter code here`
if (i % 5 == 0) results = new[] { "Sandstome" };
if (i % 3 == 0 & i % 5 == 0) results = new[] { "Darude Sandstome" };
else Console.WriteLine(i);
}
return results;
}
我建议一个稍微好一点的选择:
public static string[] stringarray(int n)
{
bool isMultipleOf3 = i % 3 == 0;
bool isMultipleOf5 = i % 5 == 0;
string[] results = new string[n];
for ( int i = 1; i <= n; i++ )
{
if ( isMultipleOf3 && isMultipleOf5 )
{
results[i - 1] = "Darude Sandstome";
continue;
}
if (isMultipleOf3 )
{
results[i - 1] = "Deude";
continue;
}
if ( isMultipleOf5 )
{
results[i - 1] = "Sandstome";
continue;
}
results[i - 1] = i.ToString(); //Console.WriteLine(i);
}
return results;
}
它更好,因为你只计算一次i%3和i%5。而且,由于bool变量具有清晰的名称,因此您正在测试的内容更清晰。
看看这个。你正在创建循环中的数组实例,因此它清除了值。
public static string[] stringarray(int n)
{
string[] results = new string[n];
for (int i = 1; i <= n; i++)
{
if (i % 3 == 0 && i % 5 == 0)
{
results[i - 1] = "Darude Sandstome";
}
else if (i % 3 == 0)
{
results[i - 1] = "Deude";
}
else if (i % 5 == 0)
{
results[i - 1] = "Sandstome";
}
else
{
results[i - 1] = i.ToString();
}
}
return results;
}
读取以下值
string[] strResult = stringarray(16);
foreach (var item in strResult)
{
Console.WriteLine(item);
}
Console.Read();
这个问题也可以这样解决:
private static string[] StringArrays(int arrayLength) =>
Enumerable
.Range(0, arrayLength)
.Select(
ComputeDarudeOrSandstormOrBoth
)
.ToArray();
private static string ComputeDarudeOrSandstormOrBoth(int value)
{
bool isDividableBy3 = value % 3 == 0;
bool isDividableBy5 = value % 3 == 0;
return
isDividableBy3 && isDividableBy5
?
"Darude Sandstorm"
:
isDividableBy3
?
"Darude"
:
isDividableBy5
?
"Sandstorm"
:
value.ToString();
}