返回一个数组,由c#中从1到n的数字的字符串表示形式组成



这是问题的其余部分。返回一个由从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();
}

相关内容

  • 没有找到相关文章

最新更新