我有以下测试需要通过:
[TestMethod]
public void ShouldRepeatANumberOfTimes()
{
Simon simon = new Simon();
Assert.AreEqual("hello hello hello", simon.Repeat("hello", 3));
//So if parameter 3 was to be exchanged with 7, it would write "hello" seven times in one sentence.
}
对于这个任务,我认为for循环是一个自然的解决方案。所以我尝试了这个:
internal object Repeat(string v1, int v2)
{
for (int i = 0; i < v2; i++)
{
return "hello ";
}
return v1;
}
我收到以下错误:
检测到无法访问的代码。
具体来说,i
中的i++
下面有一个“错误行”。任何人都能发现什么是错的?提前谢谢。
答案 0 :(得分:3)
首次迭代(i=0
)后,您的方法返回return "hello ";
,因此永远不会执行i++
。此外,您将无法访问return v1
行,因为您已经返回了其他内容。您似乎想要返回(hello
v2次+ v1
),因此您的代码应该是这样的(请注意yield return
用法):
internal IEnumerable<string> Repeat(string v1, int v2)
{
for (int i = 0; i < v2; i++)
{
yield return "hello ";
}
yield return v1;
}
答案 1 :(得分:3)
应该有效
internal object Repeat(string v1, int v2)
{
var str = "";
for (int i = 0; i < v2; i++)
{
str += " " + v1;
}
return str.Trim();
}
答案 2 :(得分:1)
您将无法访问该行&#39;返回v1&#39;因为你有这条线&#39;返回&#34;你好&#34;&#39;在你的for循环中。因此,您的程序将在for循环中退出。
答案 3 :(得分:1)
当你总是在第一次迭代中返回某些内容时,你只能运行一次循环。因此,for循环中的i++
永远不会执行。
另外,正如Devin Liu正确指出的那样,从循环内部返回一些内容也会使return v1
从外部无法访问,因为你(再次总是)之前会返回一些内容。
答案 4 :(得分:1)
您遇到的问题多于错误:
在你的循环中,你总是返回&#34;你好&#34;,无论v1。
您在FIRST迭代中返回"hello "
,因此永远不会重新return v1;
行
如果你传递0作为第二个参数,它仍然会返回v1一次(从最后一次回复调用)。
即使您修复了该功能,如果将其称为simon.Repeat("hello", 3)
,结果也会是"hellohellohello"
。
您可以将函数重写修复为:
String reps = String.Empty;
for (int i = 0; i < v2; i++)
{
reps = string.Concat(reps, v1);
}
return reps;
你的测试为:
Assert.AreEqual("hellohellohello", simon.Repeat("hello", 3));
答案 5 :(得分:1)
正如其他提到的,你的功能总是会结束这一行
import json
print json.dumps([['a','b','c'], ['d','e','f']]);
要重复你的字符串,你可以使用这样的东西而不需要任何循环。
<?php
$command = escapeshellcmd('python test.py');
$output = shell_exec($command);
echo $output;
$arr = json_decode($output);
var_dump($arr);
?>
只需将此单行放入您的函数中,并将return "hello ";
和return string.Join(" ", Enumerable.Repeat("Hello", 2));
替换为您的参数
答案 6 :(得分:1)
此方法将返回一个字符串而不是一个列表,并添加正确的空格量,因为测试用例没有尾随空格。
internal object Repeat(string v1, int v2)
{
var output = string.empty;
for (int i = 0; i < v2; i++)
{
output += v1;
if(i <= v2-1)
{
output += " ";
}
}
return output ;
}
我推荐的其他一些方法: 如果你认为你将构建非常大的字符串,我建议使用StringBuilder,我不只是尽可能快地编写它。 你也可以在循环结束时删除尾随空格,我只是不想从头开始添加它。